首页 > 解决方案 > 在 Bash 中的同一标记内删除 XML 选项卡和换行符

问题描述

我有如下 XML 数据,具有不同的名称和结束标记。

这种格式易于阅读,但在数据提取方面存在问题。

XML 源数据

<Device name="MotorA" 
type="stepper" 
factor="2" 
profile="high" 
SyncMode="false">

<Param name="Gain" 
type="Baic" 
PID="Standard" 
valid="true" 
version="1.2"/>

预期产出

<Device name="MotorA" type="stepper" factor="2" profile="high" SyncMode="false">
<Param name="Gain" type="Baic" PID="Standard" valid="true" version="1.2"/>

如何删除同一标签(一个标签,一行)中的制表符/换行符以在 Bash 脚本中提取数据?

环境是“Linux develop 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux”

标签: xmlbash

解决方案


你的节点的结束</Device>标签在哪里?<Device [...]>您的 XML 数据表明该<Param [...]>节点实际上是子节点而不是兄弟节点。

我建议您使用 XML 解析器处理 XML,例如。幸运xidel的是,对未封闭的标签相当宽容:

$ xidel -s "input.xml" -e . --output-node-format=xml
<Device name="MotorA" type="stepper" factor="2" profile="high" SyncMode="false">

<Param name="Gain" type="Baic" PID="Standard" valid="true" version="1.2"/></Device>

注意到结束</Device>标签了吗?

或适当缩进:

$ xidel -s "input.xml" -e . --output-node-format=xml --output-node-indent
<Device name="MotorA" type="stepper" factor="2" profile="high" SyncMode="false">
  <Param name="Gain" type="Baic" PID="Standard" valid="true" version="1.2"/>
</Device>

推荐阅读