假设我有以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<ns:definitions xmlns:ns="http://just.a.test">
<ns:item id="_abc" value="foo"/>
<ns:ref itemId='ns:_abc' text='ref1'/>
<ns:ref itemId='_abc' text='ref2'/>
</ns:definitions>
在架构中,itemId
被声明为QName
,即它可能包含带前缀或未加前缀的名称。
我现在想要使用XPath 1.0(准确地使用MSXML)找到对id为'_abc'的项的所有引用。
//ns:ref[@itemId='ns:_abc']
只会找到第一个引用(ref1)。
//ns:ref[@itemId='_abc']
只会找到第二个引用(ref2)。
找//ns:ref[@itemId='_abc' or @itemId='ns:_abc']
的所有引用是否比<ns:item id='_abc' ... />
更短,无论它们是否合格?
答案 0 :(得分:1)
如果您使用//ns:ref[@itemId = '_abc' or substring-after(@itemId, ':') = '_abc']
,我认为您的口头描述“无论是否合格,都可以找到所有参考文献”。但我有一些疑问,对于XML中的ID
值,值_abc
和ns:_abc
会引用相同的项,或者即使ID
来自NCName
允许冒号:http://www.w3.org/TR/xmlschema-2/#NCName。