Из того, что я читаю, я думаю, вам может потребоваться использовать индикаторы схемы (XSD).
Для получения дополнительной информации проверьте следующую ссылку: Индикаторы схемы
Случайный порядок
Из вашего вопроса:
Мне нужно проверить XML, который содержит элемент в случайный порядок
Возможный ответ:
Используя индикатор Все (см. ссылку ), вы можете указать, что элементы находятся в случайном порядке .
Индикатор всех
Индикатор указывает, что дочерние элементы могут появляться в любом порядке, и что каждый дочерний элемент должен встречаться только один раз:
События
Из вашего вопроса:
некоторые из них должны существовать, а некоторые - однажды
Возможный ответ:
Если я правильно понимаю, вы хотите указать количество раз, когда элемент существует или может быть используемый. Это называется возникновением, и его снова можно найти по следующей ссылке . Вам нужно будет определить minOccurs и maxOccurs в соответствии с вашими требованиями.
Индикаторы появления
Индикаторы появления используются для определения того, как часто может возникать элемент.
Индикатор «maxOccurs» указывает максимальное количество раз, которое может встречаться элемент:
Индикатор «minOccurs» указывает минимальное количество раз, которое может встречаться элемент:
Все, включая примеры, могут можно снова найти на индикаторах XSD / схемы .
Как ваш XSD (xml схема), вероятно, будет выглядеть:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Room" type="Room_T"/>
<xs:complexType name="Room_T">
<xs:all>
<xs:element name="Element" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Box" type="Box_T" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Door" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
<xs:complexType name="Box_T">
<xs:all>
<xs:element name="Element" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="Box" type="Box_T" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:schema>
Я не проверял, действителен ли приведенный выше код, но думаю, что это определенно поможет вам начать!