验证XSD对XML是否出错?

时间:2014-04-15 12:30:13

标签: c# xml xsd xsd-validation

我试图验证XSD aginst XML但是收到错误

  

元素'表'内容不完整。预期可能元素的列表:' IP21TAG'。

XML:

<NewDataSet> 
 <Table>
  <SITE>VMD</SITE>
  <TANK>65-12-392</TANK>
  <SERVICE>HZLPG</SERVICE>
 </Table>
 <Table>
  <SITE>VMD</SITE>
  <TANK>65-12-392</TANK>
  <SERVICE>HZLPG</SERVICE>
  <IP21TAG>BC-BBH-OS-4LI21392</IP21TAG>
 </Table>
</NewDataSet>

XSD:

 <xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="NewDataSet">
 <xs:complexType>
 <xs:sequence>
 <xs:element name="Table">
 <xs:complexType>
 <xs:sequence>
 <xs:element name="SITE" type="xs:string" />
 <xs:element name="PLANT" type="xs:string" />
 <xs:element name="TANK" type="xs:string" />
 <xs:element name="SERVICE" type="xs:string" />
 <xs:element name="IP21TAG" type="xs:string" />
 </xs:sequence>
 </xs:complexType>
 </xs:element>
 </xs:sequence>
  </xs:complexType>
  </xs:element>
 </xs:schema>

任何人都可以帮我解决这个问题吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您在架构的minOccurs节点中省略了<xs:element>,其默认值为1(请参阅specifications),如果您没有指定您的XML获胜的节点,那么t根据该模式进行验证。

如果该节点是可选的,只需更改您的XSD即可反映出来。在这里,我更改了IP21TAGPLANT(因为它们在您的示例XML中都不存在,但如果其他人也是可选的,那么您应该相应地更改它们):

<xs:element name="IP21TAG" type="xs:string" minOccurs="0"/>
<xs:element name="PLANT" type="xs:string" minOccurs="0" />

如果该元素不是可选的,那么你的XML就是错误的,你可以 - 例如 - 提供一个空字符串而不是缺少节点:

<NewDataSet> 
 <Table>
  <SITE>VMD</SITE>
  <TANK>65-12-392</TANK>
  <SERVICE>HZLPG</SERVICE>
  <IP21TAG></IP21TAG>
  <PLANT></PLANT>
 </Table>
</NewDataSet>

答案 1 :(得分:0)

显然,解决方案是在可选元素上设置minOccurs =“ 0”。

但是,Visual Studio中的错误消息甚至在“可能的元素名称”列表中显示了可选元素,因此,如果您错过了元素上的minOccurs,就不会很明显。

我的问题是,一个元素错过了minOccurs =“ 0”,并且错误消息列出了全部,大约100个元素...