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>
Comments
-
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 over 8 yearsThanks. I've been pulling my hair out over this. I'm new to XSD's
-
Daniel Haley about 5 yearsAre you sure you added this answer to the right question? This is a C# question.