我在使用 .net 和 C# 针对 Schema 验证某些 XML 时遇到了一些问题。
我将 XmlReaderSettings 与 ValidationEventHandler 一起使用。
但是,这似乎在遇到 XML 文件中特定级别的第一个错误后停止捕获错误,而不是检查同一级别的下一个标签,因此基本上它不会检查 XML 文件中的每个标签发现错误时跳过一个级别。
我希望从成功完成此类验证的人那里得到一些建议。
非常感谢
我在使用 .net 和 C# 针对 Schema 验证某些 XML 时遇到了一些问题。
我将 XmlReaderSettings 与 ValidationEventHandler 一起使用。
但是,这似乎在遇到 XML 文件中特定级别的第一个错误后停止捕获错误,而不是检查同一级别的下一个标签,因此基本上它不会检查 XML 文件中的每个标签发现错误时跳过一个级别。
我希望从成功完成此类验证的人那里得到一些建议。
非常感谢
这听起来像您xsd:sequence
在架构中定义了一个,并且当您的文档中元素的顺序与架构中定义的元素的顺序不匹配时,就会发生错误。
鉴于此架构:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Dog">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Age" type="xsd:int"/>
<xsd:element name="Name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
这个XML:
<Dog>
<Name>Rex</Name>
<Age>three</Age>
</Dog>
你会想象验证会产生两个错误:
1. The element 'Dog' has invalid child element 'Name'.
2. The 'Age' element is invalid - The value 'three' is invalid according to its datatype
但是您只看到第一个错误。这是因为无效子元素的第一个错误使得它无法XmlReader
解析文档的其余部分,因为它不再知道接下来会发生什么。
XMLReader 被描述为
提供对 XML 数据的快速、非缓存、只进的访问的阅读器。
从API 文档和您对应用程序行为的描述中,听起来好像引发了异常,并且定义了某种形式的验证回调方法,该方法执行非致命的操作(例如记录警告),然后将控制权返回给验证器比有问题的元素高一级。
顺便说一句:xml 元素被称为“元素”,而不是“标签”