我们有一段代码,它以如下格式返回XML:
源XML:
<Root>
<Book>
<BookId>a</BookId>
<Description>aDescription</Description>
</Book>
<Book>
<BookId>b</BookId>
<Description>bDescription</Description>
</Book>
</Root>
我想用文字字符替换特殊字符......
<
将是&lt;等
我知道我可以使用:
<xsl:character-map name="escapeMapper">
<xsl:output-character character="<" string="<"/>
<xsl:output-character character=">" string=">"/>
</xsl:character-map>
然而,这是扭曲,我想首先转换特殊字符,然后通过其他模板运行生成的XML。所以,我想通过模板替换特殊字符来运行源XML,将结果放入变量:
<xsl:variable name="vrtfPass1">
现在我可以使用多次传递技术并使用变量作为源应用其他模板。
如何将特殊字符转换为文字字符?
答案 0 :(得分:0)
听起来你想做的不是将<
和>
转换为<
和>
,而是将解析 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。