XML使用XSLT 2.0将Node转换为String

时间:2012-12-14 11:11:54

标签: xslt

我已经搜索过将XML节点重命名为字符串。我找到了XML到节点的字符串示例,但没有找到其他方式。

是否可以执行以下操作

<par>
<run> Some text <break/> </run>
</par>

<par>
<run> some text with no carraige return</run>
</par>

要:

<par>
<run> Some text &#10; </run>
</par>

非常感谢任何回复。

DONO

1 个答案:

答案 0 :(得分:1)

当然这是可能的。只需使用身份转换并专门处理<break>。而不是使用<xsl:copy>复制它,输出您喜欢的任何文本:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="break">
    <xsl:value-of select="'&#10;'"/>
  </xsl:template>

</xsl:stylesheet>

我希望您可以使用&#10;的文字输出disable-output-escaping,例如

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="break">
    <xsl:value-of select="'&amp;#10;'" disable-output-escaping="yes"/>
  </xsl:template>

</xsl:stylesheet>

但是,这是一项可选功能,并不保证任何XSLT处理器都支持。