如何查找具有ID的元素的所有QName引用

时间:2015-10-09 11:29:49

标签: xpath msxml

假设我有以下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' ... />更短,无论它们是否合格?

1 个答案:

答案 0 :(得分:1)

如果您使用//ns:ref[@itemId = '_abc' or substring-after(@itemId, ':') = '_abc'],我认为您的口头描述“无论是否合格,都可以找到所有参考文献”。但我有一些疑问,对于XML中的ID值,值_abcns:_abc会引用相同的项,或者即使ID来自NCName允许冒号:http://www.w3.org/TR/xmlschema-2/#NCName