我有以下 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.2
和 SubGroup2.3
的 PGR 元素。
因此我写了在另一个SO中找到的以下表达式
evalExpression = "//PGR[count(*)=0]";
这对第一个 PGR 层次结构有效,但对第二个 PGR 层次结构不起作用。因此,结果集的大小仅为 1
。
有人能给我举个例子吗?
预期结果
一组 2
,其中包含 PGR name="SubGroup1.2
和 PGR 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/