XPath能否按中间层级节点对选中的节点列表进行分组?
可以实现,具体方案根据你使用的XPath版本有所区别:
XPath 2.0及以上版本(推荐)
单条XPath语句即可直接返回分组后的嵌套序列,语句如下:
for $b in /a/b return $b/c/text()
如果你使用支持XPath 3.1的解析器,还可以直接输出标准嵌套数组结构:
array{ /a/b ! array{ ./c/text() } }
上述语句执行后即可直接得到你需要的[[r, s, t], [u, v, w], [x, y, z]]格式的结果。
XPath 1.0版本
XPath 1.0本身不支持返回嵌套序列结构,无法通过单条语句直接得到分组结果,需要配合宿主编程语言二次处理,步骤如下:
- 第一步执行XPath查询
/a/b,得到所有b节点的列表 - 第二步遍历每一个b节点,针对当前节点执行XPath查询
./c/text(),提取当前b节点下的所有c节点文本 - 把每一轮遍历得到的文本列表汇总,即可得到最终的嵌套分组结果
内容的提问来源于stack exchange,提问作者lukas.j
相关产品推荐
相关产品推荐

