0

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

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

我希望它像:

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

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

4

2 回答 2

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>
于 2013-10-03T04:02:59.843 回答
1

选项 indent="no" 是默认值。如果您正在获得缩进输出,那么 (a) 您使用 indent="yes" 请求它,或者 (b) 在序列化之前结果树中存在空格。如果结果树中存在空格,则 (b1) 样式表将其添加到结果树中,或者 (b2) 它是从源文档中复制的。如果 (b2) 是原因,那么放入<xsl:strip-space elements="*"/>样式表可能就是答案(假设您在源文档中没有任何需要保留的重要空白)。

除非您向我们展示您的代码,否则我们只能提供一般性建议。

于 2013-10-03T07:56:42.753 回答