我希望能够使用XSLT将撇号转换为字符串'
。我有以下XML
<OrgName>King's College</OrgName>
我希望能够输出以下内容:
<OrgName>King's College</OrgName>
我已经尝试了一个角色地图,但我认为这不起作用,因为你只能用字符串替换单个字符。
我也尝试过替换功能,但我不知道我能做些什么来确保输出文件中实际出现完整的字符串?
<xsl:value-of select='replace(OrgName,"&apos;","&apos;")' />
在我的最终解决方案中,我需要能够替换文本中的所有撇号而不是仅替换一个节点。
答案 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="'" string="&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's College</OrgName>
答案 1 :(得分:0)
这只是部分答案:
要替换角色'
,您可以使用以下内容:
<xsl:value-of select="replace(xs:string(str),
codepoints-to-string(39),
'&apos;')"/>
需要XSLT / XPath 2.0。解释codepoints-to-string
返回一系列代码点中的字符串,39
对应于字符'
'
要在XML的每个节点上进行此替换...目前我没有解决方案:会考虑它。
无论如何,我希望这有帮助。