2013-10-03 44 views
0

我使用Saxon HE 9.5作为我的XSLT处理器。由于源代码是一个大尺寸的XML,我需要将输出的大小最小化。但是,使用Saxon HE会在每个元素标签之间添加换行符。比如下面的例子:输出XML中的撒克逊换行符问题

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

我想这是这样的:

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

,这样我可以尽量减少输出XML的大小。有什么办法可以做到吗? 我试图设置indent =“no”,但输出XML无法打开。 谢谢!

回答

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> 
+0

我试过这个来自Saxon处理器的输出XML的XSLT转换。但是,我仍然无法打开结果XML。谢谢。 – user2051823

+0

@ user2051823 - 为什么你不能打开文件?有错误吗? –

1

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

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

+0

我不确定样式表或源文档的问题,但如果我使用其他XSLT处理器,则不存在换行符问题。以下是我的XSLT设置: <?xml version =“1.0”encoding =“UTF-8”?> 对于XML, <?xml version = “1.0”encoding =“UTF-8”?> 谢谢! – user2051823

+0

我再说一遍:我无法调试我看不到的代码。 –

+0

如果“其他XSLT处理器”正在使用Microsoft XML解析器,那么您很可能依赖其非标准的空间剥离行为 - 如果是这种情况,那么''应该解决它。 –