У меня проблема с проверкой XML и схемой XSD.
Допустим, у меня есть следующая структура:
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Category1>
<Elementb>a</Elementb>
<Element2>1</Element2>
<Element3>1.0</Element3>
</Category1>
<Category2>
<Element4>b</Element4>
<Element5>c</Element5>
</Category2>
</Root>
А также следующая схема:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified">
<xs:element name="Root">
<xs:complexType>
<xs:all>
<xs:element name="Category1" type="category1Type" minOccurs="0"/>
<xs:element name="Category2" type="category2Type" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name="category1Type">
<xs:all>
<xs:element name="Element1" type="xs:token" minOccurs="0"/>
<xs:element name="Element2" type="xs:integer" minOccurs="0"/>
<xs:element name="Element3" type="xs:decimal" minOccurs="0"/>
</xs:all>
</xs:complexType>
<xs:complexType name="category2Type">
<xs:all>
<xs:element name="Element4" type="xs:token" minOccurs="0"/>
<xs:element name="Element5" type="xs:token" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:schema>
Хорошо, "Elementb" не проверяется, так как он не определен в схеме. Это специально.
Давайте предположим, что мы проверяем, используя следующий код:
foreach (XmlNode rootNode in document)
{
foreach (XmlNode category in rootNode)
{
foreach (XmlElement element in category)
{
document.Validate(ValidationCallBack, element);
}
}
}
То есть, я хочу, чтобы проверка проводилась поэлементно. Проблема заключается в том, что в этом сценарии не только <Elementb>
создает исключение при вызове Validate, но и следующие элементы в этой категории. Это почему? Что мне не хватает? Я думал, что при использовании xs:all
и minOccurs="0"
порядок не имеет значения, и, поскольку <Element1>
отсутствует, <Element2>
также должен проверяться. Есть идеи? Спасибо.