0

我在使用 .net 和 C# 针对 Schema 验证某些 XML 时遇到了一些问题。

我将 XmlReaderSettings 与 ValidationEventHandler 一起使用。

但是,这似乎在遇到 XML 文件中特定级别的第一个错误后停止捕获错误,而不是检查同一级别的下一个标签,因此基本上它不会检查 XML 文件中的每个标签发现错误时跳过一个级别。

我希望从成功完成此类验证的人那里得到一些建议。

非常感谢

4

2 回答 2

1

这听起来像您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解析文档的其余部分,因为它不再知道接下来会发生什么。

于 2009-01-29T19:46:04.213 回答
0

XMLReader 被描述为

提供对 XML 数据的快速、非缓存、只进的访问的阅读器。

API 文档和您对应用程序行为的描述中,听起来好像引发了异常,并且定义了某种形式的验证回调方法,该方法执行非致命的操作(例如记录警告),然后将控制权返回给验证器比有问题的元素高一级。

顺便说一句:xml 元素被称为“元素”,而不是“标签”

于 2009-01-29T19:33:27.563 回答