如果 child 没有特定属性值,则获取 parents 属性值
Get parents attribute value if child doesn't have a specific attribute value
我在 linux 中有一个 xml 文件要处理。
我需要根据 children 获取 parent 节点的所有 ID。
在这里,我想获取 'a' 的所有 ID 'c' 而没有键“f.g”。
<a id="11111">
<b>
<c key="d.e">stuff1</c>
<c key="f.g">stuff2</c>
<c key="j.k">stuff4</c>
</b>
</a>
<a id="22222">
<b>
<c key="d.e">stuff1</c>
<c key="h.i">stuff3</c>
<c key="j.k">stuff4</c>
<c key="l.m">stuff5</c>
</b>
</a>
<a id="33333">
<b>
<c key="c.d">stuff0</c>
<c key="d.e">stuff1</c>
<c key="h.i">stuff3</c>
<c key="j.k">stuff4</c>
<c key="l.m">stuff5</c>
</b>
</a>
在这种情况下,我应该得到 22222 和 33333。
我不太确定如何为此编写 xpath。
您可以过滤(不是):
//a[[not(@key = 'f.g')]]
它将 return 您需要 'a' 个元素,但我不知道如何获取它们的 ID。
我想你正在寻找类似的东西:
//a[not(.//c[@key="f.g"])]/@id
可以翻译为:找到任何没有子节点 <c>
的节点 <a>
本身有一个名为 key
的属性,它本身的属性值为“ f.g".
@Jack Fleeting 的回答可能是最好的解决方案。作为替代方案(消耗更多):
//c[not(@key="f.g" or preceding-sibling::c[@key="f.g"] or following-sibling::c[@key="f.g"])]/ancestor::a
查找 c
元素,其自身以及之前或之后的兄弟姐妹包含不同于 @key="f.g"
的属性。然后 select 他们的 a
祖先。
我在 linux 中有一个 xml 文件要处理。 我需要根据 children 获取 parent 节点的所有 ID。 在这里,我想获取 'a' 的所有 ID 'c' 而没有键“f.g”。
<a id="11111">
<b>
<c key="d.e">stuff1</c>
<c key="f.g">stuff2</c>
<c key="j.k">stuff4</c>
</b>
</a>
<a id="22222">
<b>
<c key="d.e">stuff1</c>
<c key="h.i">stuff3</c>
<c key="j.k">stuff4</c>
<c key="l.m">stuff5</c>
</b>
</a>
<a id="33333">
<b>
<c key="c.d">stuff0</c>
<c key="d.e">stuff1</c>
<c key="h.i">stuff3</c>
<c key="j.k">stuff4</c>
<c key="l.m">stuff5</c>
</b>
</a>
在这种情况下,我应该得到 22222 和 33333。 我不太确定如何为此编写 xpath。
您可以过滤(不是):
//a[[not(@key = 'f.g')]]
它将 return 您需要 'a' 个元素,但我不知道如何获取它们的 ID。
我想你正在寻找类似的东西:
//a[not(.//c[@key="f.g"])]/@id
可以翻译为:找到任何没有子节点 <c>
的节点 <a>
本身有一个名为 key
的属性,它本身的属性值为“ f.g".
@Jack Fleeting 的回答可能是最好的解决方案。作为替代方案(消耗更多):
//c[not(@key="f.g" or preceding-sibling::c[@key="f.g"] or following-sibling::c[@key="f.g"])]/ancestor::a
查找 c
元素,其自身以及之前或之后的兄弟姐妹包含不同于 @key="f.g"
的属性。然后 select 他们的 a
祖先。