我有一些(~5)大(~1000行)XML文件,其中包含许多这样的元素:
<Foo Bar="Baz">
</Foo >
我希望他们都变成这样:
<Foo Bar="Baz" />
是否有自动为我执行此操作的工具或脚本?注意:某些元素不为空,不应更改为自动关闭标记;我关心的只有5个不同的元素名称。
答案 0 :(得分:1)
如果您有xsltproc
或其他XSLT处理器,那么这应该非常简单。现在,您在问题中显示的示例元素实际上并不为空,因为它包含文本节点(换行符)。但是XSLT允许您指定可以忽略仅空白文本节点的元素。因此像这样的样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="Foo Bar Baz"/>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
应该做你需要的。 strip-space
告诉它哪些元素应该只删除其空白文本节点子节点,模板是一个标识转换,它将输入复制到输出不变(在空白剥离之后,发生在解析时间)。一旦元素确实为空,序列化程序应将它们写为自闭标记。