使用 saxon9ee 时,什么会影响输出序列化的实体编码?

What affects entity encodingon output serialization when using saxon9ee?

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

在氧气和 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 似乎并不总是有效。我如何编码才能使输出可预测?

谢谢!

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

disable-output-escaping 在以下条件下生效:

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

(b) XSLT 处理器正在执行序列化(而不是将其输出写入 DOM 或 JDOM 树)。 (这将取决于调用处理器的方式,因此它可能取决于 oXygen 的工作方式);和

(c) 出现 d-o-e 属性的指令正在直接写入序列化程序。这不会是这种情况,例如:

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

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

通常,由于这些原因,不推荐使用 disable-output-escaping。几乎总是有更好的方法来实现您想要的目标。