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

发布于 2024-11-05 05:44:11 字数 481 浏览 2 评论 0原文

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

<OrgName>King's College</OrgName>

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

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

我尝试过字符映射表,但我认为这不起作用,因为您只能用字符串替换单个字符。

我也尝试过替换功能,但我不确定如何确保完整的字符串实际出现在输出文件中?

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

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

I'd like to be able to convert an apostrophe to the string ' using XSLT. I've got the following XML

<OrgName>King's College</OrgName>

I'd like to be able to output the following:

<OrgName>King's College</OrgName>

I've tried a character map but I don't think this works as you can only replace a single character with a string.

I've also tried a replace function but I'm not sure what I can do to make sure that the full string actually appears in the output file?

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

In my final solution I need to be able to replace all apostrophe's in the text rather than just for one node.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

十年九夏 2024-11-12 05:44:11

使用字符映射如下就这么简单

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

Using a character map is as simple as this:

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

when this transformation is applied on the provided XML document:

<OrgName>King's College</OrgName>

the wanted, correct result is produced:

<OrgName>King's College</OrgName>
再浓的妆也掩不了殇 2024-11-12 05:44:11

这只是部分答案:

要替换字符 ',您可以使用以下内容:

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

这需要 XSLT/XPath 2.0。说明 codepoints-to-string 从代码点序列返回一个字符串,39 对应于字符 ''

用于执行此替换XML 的每个节点...我目前没有解决方案:会考虑一下。

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

This is only a partial answer:

For replacing the character ' you may use the following:

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

which requires XSLT/XPath 2.0. Explanation codepoints-to-string returns a string from a sequence of code points, and 39 corresponds to the character ''

For doing this replacement on every node of your XML ... I have no solution at the moment: will think about it.

Anyway, I hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文