В идентичности ограничения, нужно выбрать элемент «Арг», имеющий конкретное значение атрибута [@ типа = «синтаксического анализа»].
Но я получаю ошибку, Выражение 'action // @ type' недопустимо относительно подмножества XPath, поддерживаемого XML-схемой.XSD предикаты XPath для выбора узла с соответствующим атрибутом
Для следующего утверждения,
<xs:selector xpath="action/arg[@type='parse']"/>
Полный файл XSD есть
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element ref="page" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="page">
<xs:complexType>
<xs:sequence>
<xs:element ref="parse"/>
<xs:element ref="action"/>
</xs:sequence>
</xs:complexType>
<xs:keyref name="arg_key_ref" refer="assert_key">
<xs:selector xpath="action/arg[@type='parse']"/>
<xs:field xpath="."/>
</xs:keyref>
<xs:key name="assert_key">
<xs:selector xpath="parse/parameter/name"/>
<xs:field xpath="."/>
</xs:key>
</xs:element>
<xs:element name="parse">
<xs:complexType>
<xs:sequence>
<xs:element ref="parameter" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="action">
<xs:complexType>
<xs:sequence>
<xs:element ref="arg" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="parameter">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="arg">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
Спасибо заранее,
Кишор.
Спасибо за ваш ответ Ян. libxml2 не поддерживает XPath 2.0. Есть ли другой способ обхода? –
@NandkishorBiradar, если вы можете немного изменить формат XML (например, используйте элемент с именем 'parseArg' вместо' arg type = "parse" '), тогда это самый простой подход, но если формат исправлен, вам придется искать в правила схемы для проверки перекрестной ссылки. –