java - 使用 XPath 表达式始终查找相似元素名称的层次结构中的最后一个元素

标签 java xml xpath

我有以下 XML 结构

<?xml version = "1.0" encoding = "UTF-8"?>
<ROOT>
    <PGR name="Group1">
        <PGR name="SubGroup1.1">
            <PGR name="SubGroup1.2">
                <PRODUCT></PRODUCT>
            </PGR>
        </PGR>
    </PGR>
    <PGR name="Group2">
        <PGR name="SubGroup2.1">
            <PGR name="SubGroup2.2">
                <PGR name="SubGroup2.3">
                    <PRODUCT></PRODUCT>
                </PGR>
            </PGR>
        </PGR>
    </PGR>
</ROOT>

我想要一个 XPath 表达式,它返回名为 SubGroup1.2SubGroup2.3 的 PGR 元素。

因此我写了在另一个SO中找到的以下表达式

evalExpression = "//PGR[count(*)=0]";

这对第一个 PGR 层次结构有效,但对第二个 PGR 层次结构不起作用。因此,结果集的大小仅为 1

有人能给我举个例子吗?

预期结果

一组 2,其中包含 PGR name="SubGroup1.2PGR name="SubGroup2.3

最佳答案

您可以做的一件事是添加一个检查,以检查是否有一个直接 PRODUCT 子项:

//PGR[./PRODUCT]

或者,PGR 节点没有 PGR 节点作为子节点:

//PGR[not(PGR)]
<小时/>

计算 child::* 的问题是 child 轴仅考虑直接子项。您可以切换到descendant axis相反,检查所有的 child 、孙子、孙孙等,只需要 1:

//PGR[count(descendant::*) = 1]

关于java - 使用 XPath 表达式始终查找相似元素名称的层次结构中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59247672/

相关文章:

java - 如何在Java中获得对音频线的独占访问权?

java - 将 Kotlin 与 Gradle 结合使用

xml - 在 Perl 中将类似 XML 的格式转换为 CSV

xml - 使用 xpath 和 xslt 选择所有匹配的节点(没有额外的模板或 for-each)

java - readObjectNoData 何时被调用

java - 有没有更快的方法来生成 N 整数列表

php - 如何防止php simplexml中的自闭标签

android - 在 Android 中读取/写入外部 XML 文件

selenium - 如何使用Selenium2Library使用Robot Framework计算表中td/tr的数量

css - XSLT 测试以检查 <tr> 父节点 (<table>) 是否具有特定 ID