0

我们有一段代码以如下格式返回 XML:

源 XML:

<Root>
    <Book>
        <BookId>a</BookId>
        &lt;Description&gt;aDescription&lt;/Description&gt;
    </Book>
    <Book>
        <BookId>b</BookId>
        &lt;Description&gt;bDescription&lt;/Description&gt;
    </Book>
</Root>

我想用文字字符替换特殊字符...

&lt; 

将是 < 等。

我知道我可以使用:

<xsl:character-map name="escapeMapper">
    <xsl:output-character character="&lt;" string="&lt;"/>
    <xsl:output-character character="&gt;" string="&gt;"/>        
</xsl:character-map>  

然而,这里有一个转折点,我想先转换特殊字符,然后通过其他模板运行生成的 XML。因此,我想通过替换特殊字符的模板运行源 XML,将结果放入变量中:

<xsl:variable name="vrtfPass1">

现在我可以使用多通道技术并使用变量作为源来应用其他模板。

如何将特殊字符转换为文字字符?

4

1 回答 1

0

听起来您想要做的不是将&lt;and转换&gt;<and >,而是解析XML,是吗?你能在你正在做的事情中使用 Saxon 扩展函数吗?如果是这样,我认为你可以这样做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:saxon="http://saxon.sf.net/">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <xsl:variable name="loaded">
      <xsl:apply-templates />
    </xsl:variable>

    <xsl:apply-templates select="$loaded/*" />
  </xsl:template>

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

  <xsl:template match="Book/text()[normalize-space()]">
    <xsl:copy-of select="saxon:parse(.)"/>
  </xsl:template>
</xsl:stylesheet>

尽管这假定文本子级Book本身总是格式良好的 XML。

于 2013-03-04T15:56:11.503 回答