我正在寻找一个带有xapth的表达式来传递两个级别:子节点和"细节孙子节点" :
例如:
<nodeLevel_1>
<nodeLevel_1.1 value="a" />
<nodeLevel_1.2 value="b" />
<nodeLevel_1.3>
<nodeLevel_1.3.1 value="c" />
</nodeLevel_1.3>
</nodeLevel_1>
<nodeLevel_2>
....
这里我试图达到一个属性:
nodeLevel_1.1/@value
和nodeLevel_1.3.1/@value
但没有通过nodeLevel_1.2/@value
。
我尝试使用:descendant::nodeLevel1/@value
但是使用这个xpath,我获得了nodeLevel_1.2的@value属性,我不想要这个。
有没有办法用xpath管理这种情况?感谢。
答案 0 :(得分:0)
您可以检查标记名称是否不等于nodeLevel_1.2
。
使用xmllint
进行测试:
$ cat input.xml
<nodeLevel_1>
<nodeLevel_1.1 value="a" />
<nodeLevel_1.2 value="b" />
<nodeLevel_1.3>
<nodeLevel_1.3.1 value="c" />
</nodeLevel_1.3>
</nodeLevel_1>
$ xmllint input.xml --xpath "//descendant::nodeLevel_1/*[not(self::nodeLevel_1.2)]/@value"
value="a"