xmlstarlet查询仅返回首个匹配结果,如何提取全部XML测量数据
解决方案
你可以使用以下修正后的xmlstarlet命令得到预期输出:
xmlstarlet sel -T -t -m /RMCU/TP/VALUES -v "concat(DATETIME,';',../@id,';',format-number(TMP,'0.0000'))" -n short.xml
如果你的环境下xmlstarlet不支持format-number函数,也可以用管道结合awk完成数值格式化:
xmlstarlet sel -T -t -m /RMCU/TP/VALUES -v "concat(DATETIME,';',../@id,';',TMP)" -n short.xml | awk -F';' '{printf "%s;%s;%.4f\n",$1,$2,$3}'
修改说明
- 调整匹配路径:将原命令中匹配
/RMCU/TP改为匹配/RMCU/TP/VALUES,遍历所有测量条目而非仅遍历传感器节点,解决了仅输出每个传感器第一条数据的问题 - 调整属性取值:使用
../@id从当前VALUES节点向上获取父节点TP的id属性 - 新增数值格式化:通过
format-number函数或者awk的printf将温度值强制格式化为四位小数,符合预期输出的格式要求
内容的提问来源于stack exchange,提问作者maplecut
相关产品推荐
相关产品推荐

