我正在使用 XSLT 在 XML 文档中进行非常简单的转换。我只想删除所有具有特定名称的元素节点。
碰巧在我的源文档中,所有这些节点都位于文档的末尾,但是在转换之后,虽然这些节点按照我的预期消失了,但在它们的位置上有很多空行。
这严格来说是一个装饰问题,因为我通过转换完成了我想要的事情,但出于好奇:我怎样才能摆脱这些空行?
这是我用于转换的 XSL 文件(我想要删除的元素名为“关系”):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="relation"/>
</xsl:stylesheet>
原因在于纯空白文本节点是已删除元素的直接兄弟节点.
Solution:只需添加此 XSLT 指令即可删除任何纯空白文本节点——甚至在转换开始之前:
<xsl:strip-space elements="*"/>
结果可能会丢失缩进——如果是这样,请添加以下内容:
<xsl:output omit-xml-declaration="yes" indent="yes"/>
完整的转变变成:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="relation"/>
</xsl:stylesheet>
当应用于此 XML 文档时(没有提供!):
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
</nums>
产生了想要的正确结果(没有尾随空格):
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)