0

我有一个 HTML (xhtml) 的转换,声明

<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="2.0" 

<xsl:output method="xhtml" encoding="UTF-8" omit-xml-declaration="yes" indent="no"/>

我在序列化时得到了不同的实体编码。当我使用以下代码(其中 $converted-value 为:)输出格式化文本时Jul&nbsp;28,&nbsp;2015&nbsp;&nbsp;&nbsp;03:13:15&nbsp;p.m.&nbsp;EDT,有时&nbsp;会编码,有时则不会。

<span style="white-space:pre;">
    Jan&nbsp;05,&nbsp;2016&nbsp;&nbsp;&nbsp;05:00:44&nbsp;p.m.&nbsp;EST
</span>

在 Oxygen 和 Java 程序中执行时可以看到差异。从 Oxygen 中,实体始终输出为&nbsp;,但在其他情况下(不一致),输出被编码:&amp;nbsp;如下所示。

<span style="white-space:pre;">
    Jan&nbsp;05,&nbsp;2016&nbsp;&nbsp;&nbsp;05:00:44&nbsp;p.m.&nbsp;EST
</span>

或者

<span style="white-space:pre;">
    Jul&amp;nbsp;28,&amp;nbsp;2015&amp;nbsp;&amp;nbsp;&amp;nbsp;03:13:15&amp;nbsp;p.m.&amp;nbsp;EDT
</span>

此行为在同一台机器上和其他机器上不一致。是什么控制了这种行为?似乎这disable-output-escaping并不总是有效。如何编码以使输出可预测?

谢谢!

4

1 回答 1

0

如果输入是六个字符的序列 (&, n, b, s, p, ;)(与用 表示的单个字符不同),那么如果 disable-output-escaping 是&nbsp;,它将被序列化为 6 个字符的字符串&nbsp;有效,否则为 10 个字符的字符串&amp;nbsp;

禁用输出转义在以下情况下生效:

(a) 您在样式表中请求它,并且

(b) XSLT 处理器正在执行序列化(而不是将其输出写入 DOM 或 JDOM 树)。(这将取决于处理器是如何被调用的,所以它可能取决于 oXygen 是如何做事的);和

(c) 出现 doe 属性的指令直接写入序列化程序。例如,如果:

(i) 指令的输出被捕获在一个变量中

(ii) 指令出现在 try/catch 块中

通常,出于这些原因,不推荐使用禁用输出转义。几乎总有一种更好的方法可以实现您想要的目标。

于 2016-01-13T15:12:51.280 回答