我有几个(~5)大(~1000 行)XML 文件,其中包含许多这样的元素:
<Foo Bar="Baz">
</Foo >
我希望他们都变成这样:
<Foo Bar="Baz" />
是否有可以自动为我执行此操作的工具或脚本?注意:有些元素不是空的,不应该改成自闭标签;我关心的只有大约 5 个不同的元素名称。
我有几个(~5)大(~1000 行)XML 文件,其中包含许多这样的元素:
<Foo Bar="Baz">
</Foo >
我希望他们都变成这样:
<Foo Bar="Baz" />
是否有可以自动为我执行此操作的工具或脚本?注意:有些元素不是空的,不应该改成自闭标签;我关心的只有大约 5 个不同的元素名称。
如果您有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
告诉它哪些元素应该剥离它们的纯空白文本节点子节点,并且模板是一个恒等变换,它将输入复制到输出不变(在空白剥离之后,这发生在解析时)。一旦元素真的是空的,序列化程序应该将它们写成自封闭标签。