本文介绍了祖先属性的Xpath测试不等于字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试测试元素祖先上的属性是否不等于字符串.
I'm trying to test if an attribute on an ancestor of an element not equal a string.
这是我的XML ...
Here is my XML...
<aaa att="xyz">
<bbb>
<ccc/>
</bbb>
</aaa>
<aaa att="mno">
<bbb>
<ccc/>
</bbb>
</aaa>
如果我要对元素ccc进行操作,则尝试测试其祖父母aaa @att不等于"xyz".
If I'm acting on element ccc, I'm trying to test that its grandparent aaa @att doesn't equal "xyz".
我目前有这个...
ancestor::aaa[not(contains(@att, 'xyz'))]
谢谢!
推荐答案
假设通过说出元素的祖先,您所指的是具有子元素的元素,那么该XPath表达式应该执行以下操作:
Assuming that by saying an ancestor of an element you're referring to an element with child elements, this XPath expression should do:
//*[*/ccc][@att != 'xyz']
它选择
- 所有节点
- 具有至少一个
< ccc>
孙子节点 - 并且具有
att
属性,其值不是xyz
.
- all nodes
- that have at least one
<ccc>
grandchild node - and that have an
att
attribute whose value is notxyz
.
更新:仅对< ccc>
的祖父母进行测试.
Update: Restricted test to grandparents of <ccc>
.
更新2:适应您的修订问题:
//ccc[../parent::aaa/@att != 'xyz']
选择
- 所有
< ccc>
元素 - 具有祖父母
< aaa>
且其属性att
设置为非xyz
值的
- all
<ccc>
elements - that have a grandparent
<aaa>
with its attributeatt
set to a value that is notxyz
这篇关于祖先属性的Xpath测试不等于字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!