XML Validation error: The element is not declared
Asked Answered
M

2

16

I am building a web service in .NET that will pass data back and forth via XML. I would like to validate the XML in the incoming requests using an XSD that I have defined.

Here is the XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="POSearch">
       <xs:sequence minOccurs="0" maxOccurs="10">
           <xs:element name="POID" type="xs:positiveInteger"/>
       </xs:sequence>
   </xs:complexType>
</xs:schema>

Here is the XML:

<POSearch>
   <POID>1</POID>
   <POID>2</POID>
</POSearch>

Here is the validation code in C#:

static void Main(string[] args){
   XmlSchemaSet iSchemas = new XmlSchemaSet();
   iSchemas.Add(string.Empty, @"...xsd file location");

   XmlReaderSettings settings = new XmlReaderSettings();
   settings.ValidationType = ValidationType.Schema;
   settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
   settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
   settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
   settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
   settings.Schemas.Add(iSchemas);

   XmlReader reader = XmlReader.Create(@"...xml file location", settings);

   try {
      while(reader.Read())
       ;
   }
   catch(Exception ex) {
      Console.WriteLine(ex.Message);
   }
}

private static void ValidationCallBack(object sender, ValidationEventArgs args) {
     if(args.Severity == XmlSeverityType.Warning)
        Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
     else
        Console.WriteLine("\tValidation error: " + args.Message);
  }

I feel like I had this working before and I'm not completely sure why this isn't working now. Whenever I run this I get the following Exception Message:

Validation error: The 'POSearch' element is not declared.

Have I defined my XSD wrong? Is my validation code wrong? The elements are all clearly there. Any help pointing me in the right direction is greatly appreciated.

Multicolored answered 7/1, 2016 at 14:11 Comment(1)
This is the only working solution I found in StackOverflow out of 10 about: "Validation error: The 'x' element is not declared." problem.Swap
A
15

You have the type declared but no element declared of that type.

Add an element declaration:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

   <xs:element name="POSearch" type="POSearch"/>

   <xs:complexType name="POSearch">
       <xs:sequence minOccurs="0" maxOccurs="10">
           <xs:element name="POID" type="xs:positiveInteger"/>
       </xs:sequence>
   </xs:complexType>
</xs:schema>
Allochthonous answered 7/1, 2016 at 14:57 Comment(0)
C
5

Try this:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="POSearch">
       <xs:sequence minOccurs="0" maxOccurs="10">
           <xs:element name="POID" type="xs:positiveInteger"/>
       </xs:sequence>
   </xs:complexType>
    <xs:element name="POSearch" type="POSearch"/>
</xs:schema>
Courante answered 7/1, 2016 at 14:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.