【发布时间】:2014-12-31 09:02:34
【问题描述】:
我需要几个问题的帮助,使用 bash 工具
- 我想从文件中删除空的 xml 标签,例如:
<CreateOfficeCode>
<OperatorId>ve</OperatorId>
<OfficeCode>1234</OfficeCode>
<CountryCodeLength>0</CountryCodeLength>
<AreaCodeLength>3</AreaCodeLength>
<Attributes></Attributes>
<ChargeArea></ChargeArea>
</CreateOfficeCode>
变成:
<CreateOfficeCode>
<OperatorId>ve</OperatorId>
<OfficeCode>1234</OfficeCode>
<CountryCodeLength>0</CountryCodeLength>
<AreaCodeLength>3</AreaCodeLength>
</CreateOfficeCode>
为此,我已经通过这个命令这样做了
sed -i '/><\//d' file
这不是那么严格,它更像是一个技巧,更合适的是找到<pattern></pattern>并将其删除。建议?
- 二、怎么走:
<CreateOfficeGroup>
<CreateOfficeName>John</CreateOfficeName>
<CreateOfficeCode>
</CreateOfficeCode>
</CreateOfficeGroup>
到:
<CreateOfficeGroup>
<CreateOfficeName>John</CreateOfficeName>
</CreateOfficeGroup>
- 作为一个整体?来自:
<CreateOfficeGroup>
<CreateOfficeName>John</CreateOfficeName>
<CreateOfficeCode>
<OperatorId>ve</OperatorId>
<OfficeCode>1234</OfficeCode>
<CountryCodeLength>0</CountryCodeLength>
<AreaCodeLength>3</AreaCodeLength>
<Attributes></Attributes>
<ChargeArea></ChargeArea>
</CreateOfficeCode>
<CreateOfficeSize>
<Chairs></Chairs>
<Tables></Tables>
</CreateOfficeSize>
</CreateOfficeGroup>
到:
<CreateOfficeGroup>
<CreateOfficeName>John</CreateOfficeName>
<CreateOfficeCode>
<OperatorId>ve</OperatorId>
<OfficeCode>1234</OfficeCode>
<CountryCodeLength>0</CountryCodeLength>
<AreaCodeLength>3</AreaCodeLength>
</CreateOfficeCode>
</CreateOfficeGroup>
您能以个人身份回答这些问题吗?非常感谢!
【问题讨论】:
-
不要为此使用 bash/string 处理。使用用于处理 XML 的工具。类似于 XSLT 或真正的 XML 解析器和一种语言的脚本,可让您遍历生成的文档并删除元素。
-
@CharlesDuffy 的真实故事,这里没有痛苦 :) 但还有一个原因是 sed 在 unix 系统上广泛可用,而这样的工具很可能必须安装。
-
@GézaTörök,可以肯定的是,但是因为
sed不知道 XML 语法,任何使用sed修改 XML 的尝试都注定是不正确的。它不知道 CDATA 部分中存在或不存在什么,它不知道评论中存在或不存在什么……您根本无法使用 sed 准确解析 XML。 -
@thahgr:你有现代的 Python 解释器吗?如果是这样,那包括一个适当的 XML 解析器。
-
或者,您的系统是否有
xsltproc?