更改空XML元素与自闭标签元素
我有几个(〜5)大(〜1000线)与许多元素类似这样的XML文件:更改空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
告诉它哪些元素应该仅删除仅含空白的文本节点子元素,并且该模板是将输入复制为输出的恒等变换(之后在分析时发生的空白剥离)。一旦元素真的是空的,串行器应该把它们写成自封闭的标签。
我不认为XSLT 1.0指定序列化器必须使用自闭标签,但它几乎肯定会。 – 2013-03-09 09:29:48
'xsltproc'肯定会为空元素使用自闭标签,我刚刚测试过这个。 – 2013-03-09 11:06:07
“大”有多大?而且“很多”元素都具有相同的名称还是有所不同? – 2013-03-08 18:12:37
约1,000-2,000行。没有足够的麻烦一台电脑,但足够乏味手动去做。只有大约6个不同的名字。请注意,具有这些名称的某些元素不是空的,不应将其更改为自关闭标签。 – Daryl 2013-03-08 18:44:21