2015-07-02 1 views
0

Мне нужно проверить наличие списка дочерних элементов XML-элемента, но также нужно разрешить одному из дочерних элементов быть любым другим элементом.Нужен какой-либо элемент среди неупорядоченных детей.

Например, если XML, как это:

<fruits> 
    <item1>banana</item1> 
    <item2>apple </item2> 
    <anything>yolo</anything> 
</fruits> 

И с XSD, как это:

<xsd:complexType name="fruits"> 
    <xsd:all> 
    <xsd:element name="item1" type="xsd:string" minOccurs="1" maxOccurs="1" /> 
    <xsd:element name="item2" type="xsd:string" minOccurs="1" maxOccurs="1" /> 
    </xsd:all> 
</xsd:complexType> 

Я хотел бы этот XML-файл, чтобы быть в порядке в проверке. Но с моим xsd-файлом я получаю ошибку:

Элемент 'fruit' имеет недопустимый дочерний элемент 'anything'.

У вас есть совет?

ответ

1

Вы можете отказаться от неупорядоченного требования и использовать xs:any в xs:sequence, или вы можете встретить неупорядоченное требование и использовать фиксированный элемент обертки вокруг xs:any элемента в xs:all.

У вас не может быть двух способов. XSD не так ортогонален, как ваши ожидания.

+0

Да, я видел это по этой теме: http://stackoverflow.com/questions/3347822/validating-xml-with-xsds-but-still-allow-extensibility. Я найду другой путь. благодаря – Kypaz

0

Попробуйте использовать любой элемент.

Любой элемент позволяет автору расширять документ XML с помощью элементов , не указанных в схеме.

В соответствии с документацией вам потребуется использовать последовательность вместо всех, поскольку единственными допустимыми родительскими элементами являются выбор и последовательность.

+0

Да, я пробовал это, но, как вы сказали, элемент не разрешен в элемента. И мне нужно сохранить , потому что мой дочерний элемент может появиться в любом порядке ... – Kypaz

+0

Я полагаю, вы могли бы разместить любой элемент с minOccurs = 0 между каждым из необходимых элементов? Это эффективно разрешило бы любой порядок –