xsl:character-map用于替换特殊字符。

5

给定一个值为:

 <xml_element>Distrib = SU &amp; Prem &amp;lt;&amp;gt; 0</xml_element>

我需要将&amp;lt;&amp;gt;转换为&lt;&gt;,因为下游应用程序需要在整个XML文档中使用这种格式。 我还需要对引号和撇号进行转换。我正在尝试在XSLT 2.0中使用字符映射。

<xsl:character-map name="specialchar">
    <xsl:output-character character="&apos;" string="&amp;apos;" />
    <xsl:output-character character="&quot;" string="&amp;quot;" />
    <xsl:output-character character="&gt;" string="&amp;gt;" />
</xsl:character-map>

1
非常好的问题(+1)。请查看我的答案以获取解释和完整的解决方案。 :) - Dimitre Novatchev
1个回答

8
"

可以使用<xsl:character-map>指令将单个字符序列化为任何字符串。然而,此问题需要更多的字符(一个和另一个字符相连的和号需要被替换)。

<xsl:character-map>无法解决这样的问题。

以下是使用XPath 2.0 replace()函数解决此问题的方法:

"
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes"/>

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

 <xsl:template match="text()">
   <xsl:value-of select=
    'replace(
        replace(
                replace(., "&amp;lt;", "&lt;"),
                "&amp;gt;",
                "&gt;"
                ),
        "&amp;apos;",
        "&apos;"
        )
    '/>
 </xsl:template>
</xsl:stylesheet>

当将此转换应用于以下XML文档时:

<xml_element>Distrib = SU &amp; &amp;apos;Prem &amp;lt;&amp;gt; 0</xml_element>

所需结果已产生:

<xml_element>Distrib = SU &amp; 'Prem &lt;&gt; 0</xml_element>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接