У меня есть файл XML, и я выводю его схему XSD во время выполнения, используя класс XmlSchemaInference
.
Пример файла:
<products>
<product id="1" name="t-shirt">
<size name="medium"/>
<size name="large"/>
<price>
<net>10</net>
<gross>25</gross>
</price>
</product>
<product id="2" name="computer mouse">
<price>
<net>50</net>
</price>
</product>
</products>
Это работает -он выводит схему красиво:
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="products">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="product">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="size">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="price">
<xs:complexType>
<xs:sequence>
<xs:element name="net" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="gross" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedByte" use="required" />
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Вопрос в следующем:
Как я могу выполнить итерацию (рекурсивно?) всех элементов этой схемы?Как они хранятся в классе XmlSchemaSet
?Мне нужно представить их пользователю, чтобы они могли сделать некоторые сопоставления.
Я получаю XmlSchema
из свойства XmlSchemaSet.Schemas
, и что тогда?XmlSchema.Elements
содержит только один элемент (products
), и я не могу найти способ найти его подэлементы.