xml - XPath 可以按中间节点对选定节点列表进行分组吗?
问题描述
我有以下 XML 字符串:
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b>
<c>r</c>
<c>s</c>
<c>t</c>
</b>
<b>
<c>u</c>
<c>v</c>
<c>w</c>
</b>
<b>
<c>x</c>
<c>y</c>
<c>z</c>
</b>
</a>
通过“a/b/c/text()”的 XPath 查询,我可以轻松提取列表:
[ r, s, t, u, v, w, x, y, z ]
是否可以像这样获得按级别“b”分组的结果:
[
[ r, s, t ],
[ u, v, w ],
[ x, y, z ]
]
解决方案
不,仅 XPath 无法生成字符串列表:
- XPath 1.0 的节点集从不嵌套。
- XPath 2.0/3.1 的序列从不嵌套。
通常,XPath 用于选择,而不是转换。在您的第一个示例中,XPath 选择文本节点列表并将它们显示为字符串值列表。
要进一步转换由一个或多个 XPath 表达式选择的节点,请使用宿主语言(XSLT、Python、JavaScript 等)的通用编程工具。
更新:根据您的评论,您表示所需分组的词汇表示就足够了。是的,您可以通过字符串函数组成目标输出:
XPath 2.0
concat('[',
string-join(for $b in /a/b
return concat('[',string-join($b/c,','),']'),
','),
']')
推荐阅读
- excel - 插入一系列单元格而不是插入整行
- php - 在服务器上找不到类 Google_client,但在 localhost 上没问题
- apache-spark - 将 Spark 的本地 tmp 文件夹放在共享目录中是否安全
- android - Google Play:未显示用于删除先前声明的新 APK 权限的表单字段“合规状态”
- python - TypeError:需要一个类似字节的对象,而不是已知纯文本攻击中的“str”
- android - 广播接收器在外部存储上获取媒体更改的正确意图过滤器是什么?
- linux - Linux tr 命令失败“未对齐的构造”
- sql - 如果存在NULL,则排除多个条目的内部联接查询
- android - 单击显示旧数据时使用 RecyclerView 搜索视图
- python - String Join 将 True 视为布尔值而不是字符串