如何使用xmlstarlet匹配动态XML标签并提取对应内容?
解决xmlstarlet合并动态XML标签名与对应值的问题
示例输入XML(推测结构)
<ST> <Data3020> <value>110</value> <detailType>N/A</detailType> </Data3020> <Data3030> <value>10</value> <detailType>N/A</detailType> </Data3030> <Data3040> <value>70</value> <detailType>N/A</detailType> </Data3040> <Data3080> <value>770</value> <detailType>N/A</detailType> </Data3080> <Data3090> <value>44</value> <detailType>N/A</detailType> </Data3090> </ST>
目标输出格式
Data3020|110|N/A Data3030|10|N/A Data3040|70|N/A Data3080|770|N/A Data3090|44|N/A
最终xmlstarlet命令
xmlstarlet sel -t -m "/ST/*[starts-with(name(), 'Data')]" -v "concat(name(), '|', value, '|', detailType)" -nl test.xml
命令解释
-m "/ST/*[starts-with(name(), 'Data')]":定位到<ST>下所有以Data开头的动态子标签-v "concat(name(), '|', value, '|', detailType)":将当前标签名、value子元素值、detailType子元素值用竖线|拼接成一行-nl:每条结果后自动换行
灵活调整输出
如果只需要标签名和value值,修改concat内容即可:
xmlstarlet sel -t -m "/ST/*[starts-with(name(), 'Data')]" -v "concat(name(), '|', value)" -nl test.xml
内容的提问来源于stack exchange,提问作者Invalidsearch
相关产品推荐
相关产品推荐

