输出XML中的Saxon换行问题

时间:2013-10-03 03:40:55

标签: xslt saxon

我使用Saxon HE 9.5作为我的XSLT处理器。由于源是一个大型XML,我需要最小化输出的大小。但是,使用Saxon HE将在每个元素标记之间添加换行符。如下例:

 <Element1>
   <attr1>
    test1
   </attr1>
 </Element1>

我希望它像:

<Element1> <attr1> test1 </attr1> </Element1>

这样我就可以最小化输出XML的大小。有什么办法吗? 我试图设置indent =“no”,但输出XML无法打开。 谢谢!

2 个答案:

答案 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="*"/>放在样式表中可能就是答案(假设源文档中没有任何需要保留的重要空格)。

除非您向我们展示您的代码,否则我们不能提供除一般建议之外的任何其他建议。