Элементы с разными именами в последовательности - PullRequest
0 голосов
/ 08 июля 2011

Как определить схему для следующего XML:

<root>
    <elements>
        <element1/>
        <element2/>
        <element1/>
    </elements>
    <elements>
        <element2/>
        <element1/>
    </elements>
    <elements>
        <element1/>
        <element2/>
    </elements>
</root>

, где количество элементов element1 и element2 не ограничено, и их можно смешивать в различном порядке. Это вообще возможно? Или я должен просто переопределить XML как:

<root>
    <elements>
        <element type="1"/>
        <element type="2"/>
        <element type="1"/>
    </elements>
    <elements>
        <element type="2"/>
        <element type="1"/>
    </elements>
    <elements>
        <element type="1"/>
        <element type="2"/>
    </elements>
</root>

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Согласно генератору схемы Visual Studio, вы можете сделать это следующим образом:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="elements">
          <xs:complexType>
            <xs:sequence>
              <xs:choice maxOccurs="unbounded">
                <xs:element name="element1" />
                <xs:element name="element2" />
              </xs:choice>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
1 голос
/ 08 июля 2011

Схема вашей первой структуры

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="elements">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:choice maxOccurs="unbounded">
                                <xs:element name="element1" />
                                <xs:element name="element2" />
                            </xs:choice>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Определение схемы вашей второй структуры

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="elements">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element maxOccurs="unbounded" name="element">
                                <xs:complexType>
                                    <xs:attribute name="type" type="xs:unsignedByte" use="required" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...