我使用Saxon HE 9.5作为我的XSLT处理器。由于源是一个大型XML,我需要最小化输出的大小。但是,使用Saxon HE将在每个元素标记之间添加换行符。如下例:
<Element1>
<attr1>
test1
</attr1>
</Element1>
我希望它像:
<Element1> <attr1> test1 </attr1> </Element1>
这样我就可以最小化输出XML的大小。有什么办法吗? 我试图设置indent =“no”,但输出XML无法打开。 谢谢!
答案 0 :(得分:2)
您可以使用<xsl:output indent="no"/>
来关闭缩进,但是包含文字的元素中的换行符仍然存在(即使使用<xsl:strip-space elements="*"/>
)。您可以使用normalize-space()
删除它们。
示例...
XML输入
<Element1>
<attr1>
test1
</attr1>
</Element1>
XSLT 2.0 (也可以作为1.0)
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|*|processing-instruction()|comment()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>
XML输出
<Element1><attr1>test1</attr1></Element1>
答案 1 :(得分:1)
选项indent =“no”是默认值。如果你得到缩进输出,那么(a)你使用indent =“yes”要求它,或者(b)在序列化之前结果树中存在空格。如果结果树中存在空格,则(b1)样式表将其添加到结果树中,或者(b2)将其从源文档中复制。如果(b2)是原因,那么将<xsl:strip-space elements="*"/>
放在样式表中可能就是答案(假设源文档中没有任何需要保留的重要空格)。
除非您向我们展示您的代码,否则我们不能提供除一般建议之外的任何其他建议。