使用以下内容我总是会收到无效的子元素错误。我是XML的新手,我一直在寻找网络,试图弄清楚这一点,但没有运气。我有另一个XSD验证XML提交给我的应用程序,它工作得很好,但它使用属性而不是元素。无法使用XSD中的元素来验证通过我无法控制的第三方应用程序提交的XML。
XSD
XML
<?xml version="1.0" encoding="Windows-1252"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="SCCAParticipationList"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Entry"> <xs:complexType> <xs:sequence> <xs:element name="Address" type="xs:string" minOccurs="0" /> <xs:element name="CarModel" type="xs:string" minOccurs="0" /> <xs:element name="CarNo" type="xs:string" minOccurs="0" /> <xs:element name="TotalTm" type="xs:string" minOccurs="0" /> <xs:element name="BestTm" type="xs:string" minOccurs="0" /> <xs:element name="Region" type="xs:string" minOccurs="0" /> <xs:element name="MemberNo" type="xs:string" minOccurs="1" /> <xs:element name="FirstName" type="xs:string" minOccurs="1" /> <xs:element name="LastName" type="xs:string" minOccurs="1" /> <xs:element name="Class" type="xs:string" minOccurs="1" /> <xs:element name="Pos" type="xs:string" minOccurs="1" /> <xs:element name="UniqueID" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
<?xml version="1.0" encoding="Windows-1252"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="SCCAParticipationList"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Entry"> <xs:complexType> <xs:sequence> <xs:element name="Address" type="xs:string" minOccurs="0" /> <xs:element name="CarModel" type="xs:string" minOccurs="0" /> <xs:element name="CarNo" type="xs:string" minOccurs="0" /> <xs:element name="TotalTm" type="xs:string" minOccurs="0" /> <xs:element name="BestTm" type="xs:string" minOccurs="0" /> <xs:element name="Region" type="xs:string" minOccurs="0" /> <xs:element name="MemberNo" type="xs:string" minOccurs="1" /> <xs:element name="FirstName" type="xs:string" minOccurs="1" /> <xs:element name="LastName" type="xs:string" minOccurs="1" /> <xs:element name="Class" type="xs:string" minOccurs="1" /> <xs:element name="Pos" type="xs:string" minOccurs="1" /> <xs:element name="UniqueID" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
<?xml version="1.0"?> <SCCAParticipationList> <Entry> <MemberNo>3333333</MemberNo> <FirstName>Test</FirstName> <LastName>Person</LastName> <Class>stt</Class> <Pos>13</Pos> <CarModel>Mazda Miata</CarModel> <Address>123 Test Dr ,The Woodlands TX,55555,US</Address> </Entry> <Entry> <MemberNo>2222222</MemberNo> <FirstName>John</FirstName> <LastName>Doe</LastName> <Class>sio</Class> <Pos>3T</Pos> <CarModel>Subaru Impreza</CarModel> <Address>111 Test Circle ,Austin TX,77777,US</Address> </Entry> </SCCAParticipationList>
C#
<?xml version="1.0"?> <SCCAParticipationList> <Entry> <MemberNo>3333333</MemberNo> <FirstName>Test</FirstName> <LastName>Person</LastName> <Class>stt</Class> <Pos>13</Pos> <CarModel>Mazda Miata</CarModel> <Address>123 Test Dr ,The Woodlands TX,55555,US</Address> </Entry> <Entry> <MemberNo>2222222</MemberNo> <FirstName>John</FirstName> <LastName>Doe</LastName> <Class>sio</Class> <Pos>3T</Pos> <CarModel>Subaru Impreza</CarModel> <Address>111 Test Circle ,Austin TX,77777,US</Address> </Entry> </SCCAParticipationList>
答案 0 :(得分:6)
至少有一个问题是您错误地订购了Entry子元素。序列标记中定义的元素必须以相同的顺序出现在相应的XML文档中。
根据您的架构验证您的示例XML后,这是我看到的唯一问题。
编辑:
如果您无法控制输入文件的元素顺序&amp;它不一致&amp; Entry的每个子元素每个条目最多只能出现一次,您可能希望使用all元素而不是序列。