XSLT/Xpath - 在单个语句中组合多个轴以查找"grand nephew" ?



我有一个XML文档,我需要找到离我以前的兄弟姐妹最近的后代(在树中物理上最接近——在示例中是"宝"(。我不知道任何元素名称、元素内容,也不知道当前节点或我要选择的节点在文档中的深度。示例如下:

<tagA>
<tagB>
<tagC>
junk
</tagC>
<tagC>
<tagD>
junk
</tagD>
</tagC>
</tagB>
<tagB>
<tagC>
treasure
</tagC>
</tagB>
</tagA>
<tagX/>

从tagX的位置,我需要能够测试我的前一个兄弟姐妹是否有后代,并选择最接近的一个,"宝藏"。

我猜,一旦选择了前面的同级,我就可以使用descendant::*[last()],但我不确定实现该目标的语法。显然previous-sibling::descendant::*[last()]不起作用。

有没有一种方法可以将这些轴组合起来,在一个查询中实现这一点?

XPath表达式中只有一些小错误
在上下文节点<tagX>中尝试以下表达式。

preceding-sibling::*[1]/descendant::*[last()]

其输出为

<tagC>
treasure
</tagC>

如果只需要文本内容,请将/text()附加到表达式中。


另一种表达方式是

(preceding-sibling::*[1]//text()[normalize-space()])[last()]/..

使用示例XML的输出是相同的
您必须决定哪种解决方案更适合您的需求。

最新更新