XSL 在 CDATA 中取消转义 HTML

2023-12-13

我正在尝试转换 XML:

 <catalog>
            <country><![CDATA[ WIN8 &lt;b&gt;X&lt;/b&gt; Mac OS ]]></country>
    </catalog>

into

<catalog>
        <country><![CDATA[  WIN8 <b>X</b> Mac OS ]]></country>        
</catalog>

使用 XSL 转换。

我知道使用disable-output-escaping =“yes”或cdata-section-elements我可以将转义字符转换为未转义并放入CDATA中,但如果字符已经在CDATA中,则这不起作用。

有一个简单的方法吗? 谢谢。


This

<catalog>
  <country><![CDATA[  WIN8 <b>X</b> Mac OS ]]></country>        
</catalog>

相当于

<catalog>
  <country> WIN8 &lt;b&gt;X&lt;/b&gt; Mac OS </country>
</catalog>

这正是您使用时得到的

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

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

  <xsl:template match="country/text()">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>
</xsl:stylesheet>

重点是disable-output-escaping(DOE) 对属于以下的元素没有影响cdata-section-elements(CSE)。这是因为这两个指令都禁用输出转义。

文本值" WIN8 <b>X</b> Mac OS "变成:

  • 正常序列化时:WIN8 &lt;b&gt;X&lt;/b&gt; Mac OS

  • 当使用 CSE 序列化时:<![CDATA[ WIN8 <b>X</b> Mac OS ]]>

  • 当与 DOE 序列化时:WIN8 <b>X</b> Mac OS

请注意最后两个渲染是如何完全相同的,除了封闭的<![CDATA[ ... ]]>.

CDATA 禁用元素的文本节点子节点的输出转义,并且作为交换将它们包围在<![CDATA[ ... ]]>标记来弥补逃脱级别的损失。

如果您另外将 DOE 设置为<xsl:value-of>将文本输出到设置了 CSE 的元素中,但没有任何反应。输出转义已经是禁用。

因此这个

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes" />
  <xsl:output cdata-section-elements="country" />

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

  <xsl:template match="country/text()">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>
</xsl:stylesheet>

会给你准确的输入内容。

这就是为什么你无法摆脱双重转义并拥有CDATA 在同一个转变过程中。如果您确实必须在结果文档中包含 CDATA,则可以使用两步方法(第一步禁用输出转义,第二步添加回 CDATA),但我个人认为这是不值得的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSL 在 CDATA 中取消转义 HTML 的相关文章

随机推荐

  • 启动新的 Windows 应用程序:我应该使用 _TCHAR 还是 wchar_t 作为文本?

    我正在用 C 为 Windows 编写一个新的 个人爱好 应用程序 在我之前使用过的低级 Windows 内容中 TCHAR 或只是 TCHAR 用于字符串操作的数组 basic strings 使用有什么好处吗 TCHAR直接使用 Uni
  • LINQ to SQL C# 合并

    给出下表 Length Width Color ID 18 18 blue 1 12 12 red 1 我想生成单列 行 SIZES 18 x 18 12 x 12 我可以在 SQL 中执行此操作 如下所示 DECLARE SIZES VA
  • 通过使用范围解析避免多重继承引起的歧义

    这是多重继承的示例 我使用范围解析运算符而不是虚拟类来解决歧义 struct A int i struct B A struct C A struct D B C void f B i 10 void g std cout lt lt B
  • 减少两个剪切图像之间的间距

    我正在使用剪辑路径来剪辑两个图像 结果是 一切都很好 但我想像这样减少这些图像之间的间距 clip wrap display inline element webkit clip path polygon 0 100 0 0 100 0 6
  • Toast 通知不起作用

    下面的方法在调用设置 Toast 时执行 但在经过一段时间后不会显示任何 Toast Windows 8 Metro 应用程序 Toast 通知是否还需要任何设置 int scheduledToastCounter 1 public voi
  • 为什么 R 和 statsmodels 给出的方差分析结果略有不同?

    使用小型 R 样本数据集和来自的 ANOVA 示例统计模型 其中一个变量的自由度报告不同 F 值结果也略有不同 也许他们的默认方法略有不同 我可以设置 statsmodels 以使用 R 的默认值吗 import pandas as pd
  • 如何将 wav 文件转换为类似字节的对象?

    我正在尝试使用 Python 3 5 1 的 audioop 模块以编程方式分析 wav 文件以获取通道 持续时间 采样率 音量等 但是我找不到任何文档来描述如何将 wav 文件转换为 片段 参数它必须是一个类似字节的对象 有人可以帮忙吗
  • 如何从oracle数据库中删除名为“BIN$c+eOnMB3RbKSEfg/rsxtAQ==$0”的奇怪表?

    我是 Oracle 新手 为了练习 我在 Oracle 11g 及更高版本中创建了一些表 客户 司机 付款 预订 位置 区域 工作 job history select from cat语句我发现一个奇怪的表 其中包含其他创建的名为 BIN
  • TSQL 生成 5 个字符长度的字符串,所有数字 [0-9] 数据库中尚不存在

    最好的方法是什么 我需要生成一个 5 位长度的字符串 其中所有字符都是数字 但是 我需要能够执行此 x 次 用户变量 并将此随机字符串存储在数据库中 此外 我无法两次生成相同的字符串 旧琴弦将在 6 个月后被移除 伪代码 DECLARE i
  • django - 启动 dbshel​​l sqlite3 时选项太多

    我有 django 1 2 3 0 Final 我正在使用 Python 2 7 在我的设置中 我为 DATABASE ENGINE 填充了 sqlite3 我能够使用 sqlite3 在 djano manage py shell 级别
  • 为什么 Powershell 的 Tee-Object 会搞乱我的文件编码?

    周末我使用 Tee Object 生成我跟踪的日志文件的一些输出 我尝试 grep 输出文件 但无法返回任何结果 但我能够 grep 原始日志文件 Tee Object 似乎更改了文件的编码 https adamtheautomator c
  • weblogic中的类强制转换异常

    我有一个使用球衣罐子的Web应用程序 WAR文件 现在 当我尝试部署这个时 我收到类转换异常 某些引导servlet使用球衣 在分析中 我发现weblogic本身有共同的球衣罐子 模块 和我的网络应用程序有不同版本的球衣罐 现在 如果我删除
  • iPhone 4 有没有绝对确定的方法可以让 NSTimer 长期火起来

    我的 NSTimers 和后台选择器一直遇到问题 这让我抓狂 并且需要很长时间来尝试每一个调整 为了保持我的理智以及未来几代可可程序员的理智 我问这个问题 是否有绝对 100 确定的方法可以在稍后的时间点触发预定的长期计时器 无论它是否是从
  • CMake:为 #cmakedefine 变量设置不同的名称

    我知道你可以使用 CMakeconfigure file使 CMake 变量可用于您的程序 例如 我可以使用 define CMAKE BUILD TYPE 导致 define Release 但是 为了使我的代码更具可读性 我更愿意定义
  • 重定向到 https 但没有 .php

    现在我有一个https 我需要在 htaccess 中进行重定向 我可以找到这个 RewriteCond HTTPS off RewriteRule https HTTP HOST REQUEST URI L R 301 但我发现如果用户写
  • Google Script CacheService 在 sendMail 中为 inlineImages 缓存图像

    我想将图像存储在 Google Script 的缓存服务中 然后将此图像作为内联图像插入 HTML 邮件中 我已经尝试让它发挥作用 但到目前为止还没有成功 记录器中以下代码的错误是 无效参数 附件 如果我检查它显示 sendMail 中的
  • 如何动态新的匿名类?

    在 C 3 0 中 您可以使用以下语法创建匿名类 var o1 new Id 1 Name Foo 有没有办法动态创建这些匿名类到变量 Example var o1 new Id 1 Name Foo var o2 new SQ 2 Bir
  • 在一个查询 MYSQL 中插入和更新

    我有一个简单的 INSERT 查询 在单击按钮的事件上运行 这会获取变量并将它们插入到order table 我也想更新我的bands表将库存减少 1 直到达到 0 然后显示空或已售完 而不是变为负数 例如 6 要知道选择了什么频段 我可以
  • Android逐字符显示文字动画

    任何人都知道执行动画的任何有效方法 所要做的就是逐个字符地显示文本 喜欢 T Th Thi This This i This is 等等 Thanks 这可能不是最优雅的解决方案 但最简单的可能是一个快速子类TextView with a
  • XSL 在 CDATA 中取消转义 HTML

    我正在尝试转换 XML