xml - Bash 将 XML 解析为逗号分隔列表

标签 xml bash csv xpath

请问如何返回以逗号分隔的 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 sel -t -v "/nodes/node[1]/id" -m "/nodes/node[position()>1]" -v "concat(',',id)" input.xml

这将输出第一个 node/id 节点的值,然后输出以下由逗号分隔的 node/id。输出符合要求。

  • sel 选项选择 xmlstarlet 的选择/查询模式
  • -t 表示“XSLT 模板”的开始
  • 第一个 -v 选项输出 XPath 表达式的值
  • -m 选项在 XPath 表达式上创建一个 for-each
  • 第二个 -v 选项输出相对于 for-each 上下文值的 XPath 表达式的值

关于xml - Bash 将 XML 解析为逗号分隔列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59230190/

相关文章:

php - 通过 CSV 添加新信息时,数据库中的旧信息不显示 - phpMyAdmin

Swift - 替换服务器生成的 CSV 文件中的额外换行符

javascript - 即使使用 createElementNS,动态添加的 SVG 元素也不会出现

bash - 将两个命令的输出连接成一行

java - 使用正则表达式任意安装 .jar 文件

bash - wget 并在一行中运行/删除 bash 脚本

java - 使用可选条目解析分隔输入

java - Android Studio 布局在不同设备上存在差异

java - 在RelativeLayout中使单个View可见

python - 从 xml 文档中提取全部信息