XSLT / XML:将撇号转换为特定的实体字符串

时间:2011-05-03 10:09:37

标签: xml xslt character-encoding escaping

我希望能够使用XSLT将撇号转换为字符串'。我有以下XML

<OrgName>King's College</OrgName>

我希望能够输出以下内容:

<OrgName>King&apos;s College</OrgName>

我已经尝试了一个角色地图,但我认为这不起作用,因为你只能用字符串替换单个字符。

我也尝试过替换功能,但我不知道我能做些什么来确保输出文件中实际出现完整的字符串?

<xsl:value-of select='replace(OrgName,"&amp;apos;","&amp;apos;")' />

在我的最终解决方案中,我需要能够替换文本中的所有撇号而不是仅替换一个节点。

2 个答案:

答案 0 :(得分:3)

使用character map就像这个

一样简单
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output omit-xml-declaration="yes" indent="yes" use-character-maps="mApos"/>

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

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

 <xsl:template match="text()">
  <xsl:copy-of select="." />
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<OrgName>King's College</OrgName>

产生了想要的正确结果:

<OrgName>King&apos;s College</OrgName>

答案 1 :(得分:0)

这只是部分答案:

要替换角色',您可以使用以下内容:

<xsl:value-of select="replace(xs:string(str), 
                              codepoints-to-string(39), 
                              '&amp;apos;')"/>

需要XSLT / XPath 2.0。解释codepoints-to-string返回一系列代码点中的字符串,39对应于字符''

要在XML的每个节点上进行此替换...目前我没有解决方案:会考虑它。

无论如何,我希望这有帮助。