2015-11-27 7 views
1

Я использую xsd для проверки XML-файлов, которые могут иметь несколько неизвестных элементов xml. Я знаю, что xsd поддерживает «любой» элемент для обработки неизвестных элементов xml. Проблема в том, что я должен проверять атрибуты этих неизвестных элементов, и я не смог найти способ сделать это.Проверить атрибуты xml неизвестного элемента с xsd

Xml фиктивный пример:

<root> 
    <aaaaaa gui-name="my name" group="my group" chart="my chart" /> 
    <nnnnnn gui-name="my name" group="my group" chart="my chart" /> 
    <yyyyyy gui-name="my name" group="my group" chart="my chart" /> 
    ... 
    ... 
</root> 

элементы XML неизвестны, но их атрибуты хорошо известны. Как я могу проверить атрибуты этих неизвестных элементов?

Заранее спасибо.

+0

Вы говорите, что «aaaaaaa», «nnnnnn» и «yyyyyy» могут быть чем угодно? Можете ли вы получить доступ ко всем дочерним элементам и повторить проверку атрибутов вместо того, чтобы пытаться получить доступ к дочерним элементам по имени? Его трудно дать совет, не видя, что вы на самом деле делаете сейчас. – pwilmot

+0

Это просто фиктивные примеры элементов, но да, они могут быть чем угодно. Дело здесь в том, что эти элементы должны иметь одинаковые атрибуты, и мне нужно проверить, присутствуют ли эти атрибуты и имеют ли они допустимые значения. Теперь я не проверяю эти атрибуты вообще. Я просто использую «любой» xsd-элемент, который принимает все элементы. – Tharos

ответ

0

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

см http://www.w3schools.com/Xml/schema_complex_any.asp

<xs:element name="root"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:any type='dummyType' /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="dummyType"> 
    <xs:attribute name='gui-name' type='xs:string'/> 
    <xs:attribute name='group' type='xs:string'/> 
    <xs:attribute name='chart' type='xs:string'/> 

</xs:complexType> 
+0

Спасибо за предложение, но атрибут «type» не разрешен в «любом» элементе. – Tharos

0

Возможно, вам нужно реализует наследование с помощью SubstitutionGroups. Посмотрите на пункте «Абстрактные элементы и замещения групп» в следующей ссылке

http://www.ibm.com/developerworks/library/x-xtendschema/

+0

Спасибо, ваше предложение кажется полезным, когда мы знаем элементы, которые могут появиться в XML. В моем случае я не знаю, какие элементы появятся в XML. Я знаю только атрибуты, разрешенные в этих элементах. – Tharos

0

Вы бы лучше изменить формат XML. Переместите имя тега в атрибут и используйте одно и то же имя для всех тегов. Атрибут xsi: type для каждого тега может идентифицировать имя сложного типа, содержащего атрибуты. Вы посмотрели на эту возможность?

+0

Спасибо, я не владею XML, поэтому изменение его формата не может быть и речи. – Tharos

+0

Достаточно честный. XML-схема имеет два способа идентифицировать тип. Он использует имя тега для идентификации типа (или семейства типов) и/или использует атрибут xsi: type. В вашем случае ни один из методов не может быть использован, поэтому он выглядит так, как если бы этот формат XML не описывался XSD. – kimbert