将空XML元素更改为具有自关闭标记的元素

时间:2013-03-08 17:55:07

标签: xml formatting

我有一些(~5)大(~1000行)XML文件,其中包含许多这样的元素:

<Foo Bar="Baz">
</Foo >

我希望他们都变成这样:

<Foo Bar="Baz" />

是否有自动为我执行此操作的工具或脚本?注意:某些元素不为空,不应更改为自动关闭标记;我关心的只有5个不同的元素名称。

1 个答案:

答案 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告诉它哪些元素应该只删除其空白文本节点子节点,模板是一个标识转换,它将输入复制到输出不变(空白剥离之后,发生在解析时间)。一旦元素确实为空,序列化程序应将它们写为自闭标记。