使用Xpath查找某些未指定祖先的属性值
我想找到一个XPath表达式来选择节点,这些节点的属性“a”值存在,并且是它们的属性“b”和第一个祖先的属性“a”值的串联,对于这些节点,属性“a”存在,或者它们在层次结构中是第一个,具有属性“a”的节点使用Xpath查找某些未指定祖先的属性值,xpath,Xpath,我想找到一个XPath表达式来选择节点,这些节点的属性“a”值存在,并且是它们的属性“b”和第一个祖先的属性“a”值的串联,对于这些节点,属性“a”存在,或者它们在层次结构中是第一个,具有属性“a”的节点 <A a='TOWN/'> <B> <C a='TOWN/STREET' b='STREET'> <D a='TOWN/STREET' b='STREET'> <E a='TOWN/STREET/HOUSE' b='S
<A a='TOWN/'>
<B>
<C a='TOWN/STREET' b='STREET'>
<D a='TOWN/STREET' b='STREET'>
<E a='TOWN/STREET/HOUSE' b='STREET'></E>
<F a='TOWN/STREET/HOUSE' b='HOUSE'>
<G a='TOWN/STREET/HOUSE' b='HOUSE' ></G>
</F>
</D>
</C>
</B>
</A>
Xpath应该只选择元素A、C和F
我尝试了\\*[(@a=concat(祖先:*[@a][1]/@a,“/”,@b))或(不是(祖先:*[@a])]
,但它没有按预期工作
您能帮忙吗?谢谢。首先,您在查询的开头使用反斜杠而不是斜杠。然后,您的输入不一致(或复制粘贴错误?),在
//a/@a
属性的末尾有斜杠,但在其他@a
属性中没有。删除此属性时(因此,…
,此XPath查询将执行您想要的操作:
/*[@a=concat(祖先:*[@a][1]/@a,'/',@b)与否(祖先:*[@a])]
如果无法更改输入,请检查添加斜杠和不添加斜杠的版本:
/*[@a=concat(祖先:*[@a][1]/@a,“/”,@b)或@a=concat(祖先:*[@a][1]/@a,@b)或不(祖先:*[@a])]
好的,请等我几分钟。+1谢谢,这确实是打字错误。如果它有效,你应该“接受”它,这样其他有类似问题或回答问题的人可以看到问题已经解决。