xml - Bash 将 XML 解析为逗号分隔的列表
问题描述
请问如何返回以逗号分隔的 id 列表?
<nodes>
<node>
<id>1</id>
<name>idbread</name>
</node>
<node>
<id>2</id>
<name>idbutter</name>
</node>
</nodes>
预期产出
1,2
我尝试使用 XPath,但 concat 只返回第一个值。
xpath node.xml "//nodes/node/id/text()" 2>/dev/null
返回
12
解决方案
您可以为此使用xmlstarlet:
xmlstarlet sel -t -v "/nodes/node[1]/id" -m "/nodes/node[position()>1]" -v "concat(',',id)" input.xml
这会输出第一个node/id
节点的值,然后输出node/id
以逗号分隔的以下 s。输出如所愿。
sel
选项选择xmlstarlet的Select/Query模式-t
表示“XSLT 模板”的开始- 第一个
-v
选项输出 XPath 表达式的值 - 该选项在 XPath 表达式上
-m
创建一个for-each
- 第二个
-v
选项输出 XPath 表达式相对于上下文值的值for-each
推荐阅读
- oracle - oracle字符串替换字符串末尾的奇数个斜杠
- python - 在 Python Code Kivy 中将文本大小更改为按钮大小的变化
- scala - 带有 collect_list 任务的 Scala UDF 不可序列化
- tsql - CommandText 属性尚未初始化 SQL Server
- wordpress - 如何用 woocommerce 的下拉列表替换库存数量字段
- node.js - 无法导入和使用 typescript socket.io
- yaml - 如何为“安全”和“往返”获取类似格式的 yaml
- google-apps-script - 使用多个 onEdit 函数
- tensorflow - 是不是总是需要在 Keras 之前安装 TensorFlow?为什么?
- sql - SQL Server 中的错误更新