我有一个 XML 文档,我需要找到距我的前一个兄弟姐妹最近的后代(在树中物理上最接近的 - 示例中的“宝藏”)。我不知道任何元素名称、元素内容,也不知道当前节点或我要选择的节点在文档中的深度。示例如下:
<tagA>
<tagB>
<tagC>
junk
</tagC>
<tagC>
<tagD>
junk
</tagD>
</tagC>
</tagB>
<tagB>
<tagC>
treasure
</tagC>
</tagB>
</tagA>
<tagX/>
Run Code Online (Sandbox Code Playgroud)
从 tagX 的位置,我需要能够测试我的前一个兄弟姐妹是否有后代,并选择最接近的一个“Treasure”。
我猜descendant::*[last()]一旦选择了前面的同级,我就可以使用它,但我不确定到达那里的语法。显然previous-sibling::descendant::*[last()]行不通。
有没有办法组合这些轴以在单个查询中实现此目的?
您的 XPath 表达式中只有一些小错误。
从上下文节点尝试以下表达式<tagX>。
preceding-sibling::*[1]/descendant::*[last()]
Run Code Online (Sandbox Code Playgroud)
它的输出是
<tagC>
treasure
</tagC>
Run Code Online (Sandbox Code Playgroud)
如果您只需要文本内容,请附加/text()到表达式中。
另一种表达是
(preceding-sibling::*[1]//text()[normalize-space()])[last()]/..
Run Code Online (Sandbox Code Playgroud)
使用示例 XML 的输出是相同的。
您必须决定哪种解决方案更适合您的需求。
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |