我正在尝试将XML文档转换为一些纯文本代码输出,并希望有适当的缩进。我没有找到任何好的信息如何实现这一点我开始尝试了一下。
目前我正在尝试使用-param根据应该使用的缩进将空格传递给模板。
<xsl:apply-templates select="foo">
<xsl:with-param name="indent"> </xsl:with-param>
</xsl:apply-templates>
只有一个问题......如果param只包含空格,则不会传递空格!拥有像字符一样的东西可以传递前导和尾随空格,但只要我只传递空格就会变为空字符串。
<xsl:apply-templates select="foo">
<xsl:with-param name="indent"> a </xsl:with-param>
</xsl:apply-templates>
这是预期的行为吗?
我在Linux上使用xsltproc
来运行转换。
让我知道我可以提供更多信息。谢谢你的帮助!
答案 0 :(得分:2)
我只想使用<xsl:with-param name="indent" select="' '"/>
。
如果要在xsl:with-param
内传递值,则需要使用
<xsl:with-param name="indent">
<xsl:text> </xsl:text>
</xsl:with-param>
或
<xsl:with-param name="indent" xml:space="preserve"> </xsl:with-param>
答案 1 :(得分:1)
不要将字符串作为<xsl:with-param>
元素的文本节点,而是将其作为select
属性传递。
例如,以下XSLT样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<!-- With whitespace only. -->
<xsl:apply-templates select="foo">
<xsl:with-param name="indent" select=" ' ' "/>
</xsl:apply-templates>
<!-- Carriage return. -->
<xsl:text>
</xsl:text>
<!-- With leading and trailing whitespace. -->
<xsl:apply-templates select="foo">
<xsl:with-param name="indent" select=" ' b ' "/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="foo">
<xsl:param name="indent"/>
<xsl:text>$</xsl:text>
<xsl:value-of select="$indent"/>
<xsl:text>$</xsl:text>
</xsl:template>
</xsl:stylesheet>
应用于此输入XML时:
<foo>
Bar
</foo>
产生以下输出:
$ $
$ b $