У меня есть 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
содержит только один элемент (продукты
), и я не могу найти никакого способа выяснить, что это за элементы.