请问如何返回以逗号分隔的 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
。输出符合要求。
sel
选项选择 xmlstarlet 的选择/查询模式-t
表示“XSLT 模板”的开始- 第一个
-v
选项输出 XPath 表达式的值 -m
选项在 XPath 表达式上创建一个for-each
- 第二个
-v
选项输出相对于for-each
上下文值的 XPath 表达式的值
关于xml - Bash 将 XML 解析为逗号分隔列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59230190/