0

我正在尝试将 XML 文档转换为一些纯文本代码输出,并希望有适当的缩进。我没有找到任何好的信息如何实现这一点,我开始进行一些实验。

目前我正试图让 with-param 根据它应该使用的缩进将空格传递给模板。

<xsl:apply-templates select="foo">
  <xsl:with-param name="indent">  </xsl:with-param>
</xsl:apply-templates>

只有一个问题...如果参数仅包含空格,则不传递空格!拥有像字符这样的其他东西可以同时传递前导和尾随空格,但是只要我只传递空格,它就会变为空字符串。

<xsl:apply-templates select="foo">
  <xsl:with-param name="indent">  a </xsl:with-param>
</xsl:apply-templates>

这是预期的行为吗?

xsltproc在 Linux 上使用来运行转换。

让我知道我可以提供哪些更多信息。谢谢你的帮助!

4

2 回答 2

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>
于 2013-09-22T17:35:40.753 回答
1

不要将您的字符串作为 with<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>&#xd;</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  $
于 2013-09-22T17:35:23.457 回答