如何返回以逗号分隔的ID列表?
SELECT Products.ProductID
FROM Products
INNER JOIN Orders ON Products.ProductID = Orders.ProductId
WHERE Orders.OrderDate < DATEADD(day, -90, GETDATE())
GROUP BY Products.ProductID
预期输出
<nodes>
<node>
<id>1</id>
<name>idbread</name>
</node>
<node>
<id>2</id>
<name>idbutter</name>
</node>
</nodes>
我尝试使用XPath,但是concat仅返回第一个值。
xpath node.xml“ // nodes / node / id / text()” 2> / dev / null
返回
1,2
答案 0 :(得分:4)
您可以为此使用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表达式的值答案 1 :(得分:1)
使用xidel
支持xpath 3.0的更简单选项:
xidel -s node.xml -e "string-join(//nodes/node/id/text(),',')"