如何用xmlstarlet将带命名空间的XML转换为CSV?
问题解决:XMLStarlet转换带命名空间的XML为CSV
错误原因分析
你的命令无效主要有两个核心问题:
- 未处理XML默认命名空间:你的XML根节点声明了
xmlns="http://ws_export.ws.localhost/",这意味着所有子元素(Records、item、CodIO等)都属于这个命名空间,XPath必须显式指定命名空间才能匹配到这些元素。 - XPath路径错误:XML的根节点是
<ws_export>,而非<Records>,原命令的/Records/item路径无法定位到任何节点。
修正后的命令(推荐方式)
使用-N参数绑定命名空间前缀,在XPath中通过前缀引用命名空间内的元素:
xmlstarlet \ sel -T -t \ -N ns="http://ws_export.ws.localhost/" \ -m /ns:ws_export/ns:Records/ns:item \ -v "concat(ns:CodIO,';',ns:DescIO)" \ -n test.xml > test.csv
另一种临时方案(不推荐,易冲突)
如果不想绑定命名空间前缀,可以通过local-name()匹配元素名称:
xmlstarlet \ sel -T -t \ -m /*[local-name()='ws_export']/*[local-name()='Records']/*[local-name()='item'] \ -v "concat(*[local-name()='CodIO'],';',*[local-name()='DescIO'])" \ -n test.xml > test.csv
执行结果
修正后的命令会生成test.csv,内容为:
02360236;023608 SAP- Stazione
内容的提问来源于stack exchange,提问作者ultratrouble
相关产品推荐
相关产品推荐

