XML Validation error: The element is not declared

24,942

Solution 1

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>

Solution 2

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>
Share:
24,942
mac
Author by

mac

Software/Web Developer

Updated on August 13, 2022

Comments

  • mac
    mac almost 2 years

    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.

  • mac
    mac over 8 years
    Thanks. I've been pulling my hair out over this. I'm new to XSD's
  • Daniel Haley
    Daniel Haley about 5 years
    Are you sure you added this answer to the right question? This is a C# question.