1
在身份約束中,我需要選擇具有特定屬性值[@ type ='parse']的元素「arg」。
但是我收到錯誤, 對於XML Schema支持的XPath子集,表達式'action // @ type'無效。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」'),那麼這是最簡單的方法,但是如果格式是固定的,你必須看看放入schematron規則以驗證交叉引用。 –