【发布时间】:2021-02-10 10:47:10
【问题描述】:
我有一个非常简单但巨大的 xml(超过 50.000 行)。我只想提取一个重复的节点作为表(环)。考虑到这是一个例子。真实文件在“环”节点内有 300 多个元素,所以如果可能的话,我尽量避免逐个元素地编写提取命令。
这里有一个小例子
<xml>
<root>
<ration>
<ring>
<id value="1"/>
<date value="2021-01-01"/>
<price value="435"/>
</ring>
</ration>
</root>
<root>
<ration>
<ring>
<id value="14"/>
<date value="2021-02-01"/>
<price value="745"/>
</ring>
</ration>
</root>
</xml>
我想要实现的是: 这个 xmlstarlet 命令正在工作,我得到了正确的结果,但现在考虑执行 300 次(对于每个元素,我必须将调用插入 concat 部分)。我需要一个更简单的方法。
xmlstarlet sel -T -t -m '//root/ration/ring' -v "concat(id/@value,',',date/@value,',',price/@value)" -n file.xml
id, date, price
1, 2021-01-01, 435
14, 2021-02-01, 745
【问题讨论】:
-
我认为你不能用 xmlstarlet(它只支持 xpath 1.0)来做到这一点,但它可以用 xpath 2.0 及更高版本来完成——如果有的话,比如 xidel。
-
尝试了一些方法,但最后,我用 xmlstarlet 查询所有元素名称,在 bash 中编写一个 concat 查询并执行查询
标签: xml xmlstarlet