XSLT未转义的序列结果

时间:2016-02-26 20:32:30

标签: xslt xslt-2.0

我正在从XML文档生成纯文本文件。在模板中,我有一个使用<p><ul><li><pre>和其他一些HTML的简化版HTML。

在源文档中,我有一个如下所示的节点:

<p>The respond category obeys the category laws, where respond is the identity and (/&gt;/) is composition:</p>

在模板底部附近,我有以下相关规则:

<xsl:template match="p">
  <xsl:text>  </xsl:text>
  <xsl:apply-templates select="* | text()"/>
  <xsl:text>&#10;</xsl:text>
</xsl:template>
<xsl:template match="text()">
  <xsl:value-of disable-output-escaping="yes" select="."/>
</xsl:template>

这很好用。我得到以下输出:

The respond category obeys the category laws, where respond is the identity and (/>/) is composition:

现在,这里出了问题。基于an answer to another SO question,我发现我可以通过对<p>标记规则进行此更改来将输出转换为换行符:

<xsl:template match="p">
  <xsl:variable name="aaa">
    <xsl:apply-templates select="* | text()"/>
  </xsl:variable>
  <xsl:sequence select="replace(concat(normalize-space($aaa),' '), '(.{0,60}) ', '  $1&#10;')"/>
  <xsl:text>&#10;</xsl:text>
</xsl:template>

这给我以下输出:

The respond category obeys the category laws, where respond
is the identity and (/&gt;/) is composition:

它正确包裹并留下输出垫。但是,>符号现在已转义。我尝试将disable-output-escaping="yes"添加到sequence,但将saxonb错误添加到:

XTSE0090: Attribute @disable-output-escaping is not allowed on element <xsl:sequence>

在这种情况下,有没有办法避免转义>符号?

1 个答案:

答案 0 :(得分:0)

我需要添加xsl:output method="text",正如Martin在评论中提到的那样。