2013-03-04 79 views
0

我们有一段代码,这就像一个格式返回XML:添加特殊字符以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"> 

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

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

回答

0

这听起来像你想要做的是不能转换&lt;&gt;<>什么,而是要解析的XML,是吗?你能在你正在做的事情中使用撒克逊扩展功能吗?如果是这样,我想你可以做这样的事情:

<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。

+0

我不确定,我们使用apache骆驼做XSLT处理,所以在这一点上我们没有使用任何实现特定的XSLT处理。就你而言,我想你是正确的,我们不一定需要替换特殊字符....但这样做可以让我们更容易地应用XPATH/XSLT处理 – guido 2013-03-04 16:05:32