静态字段有什么用途PI_ENABLE_OUTPUT_ESCAPING& PI_DISABLE_OUTPUT_ESCAPING以及我们如何使用它们?

时间:2013-05-06 13:50:27

标签: java xslt jaxp

我是jaxp的新手,并不知道使用上面的静态字段及其含义是什么?

需要解释和示例。

提前致谢

2 个答案:

答案 0 :(得分:1)

(免责声明 - 我维护JDOM XML库) - 这些PI(ProcessingInstructions)旨在向XML 输出程序表明它们应该打破与XML标准的兼容性,并生成无效的XML。

在某些条件下,这可能很有用。

以下是JDOM test harness中的测试用例。它基本上有输入(我已经添加了一些whitepsace以使其更容易看到):

<root>
  &amp;
  <?javax.xml.transform.disable-output-escaping ?>
  &amp;&amp;
  <?javax.xml.transform.enable-output-escaping ?>
  &amp;
</root>

在上面的示例中,我们有有效的 XML。如果您要通过识别处理指令的系统处理此数据,则应输出(类似)

<root>
  &amp;
  &&
  &amp;
</root>

请注意,这不再是有效的XML .....&amp; PI之间的字符未正确转义。

从JDOM的角度来看,这是记录在案here in the javadoc

这些指令通常用于XML转换,以产生“非常漂亮”的输出,而不是由机器消耗,而是由人们消耗。请谨慎使用。

希望能给你一些洞察力......一切顺利。

答案 1 :(得分:0)

XSLT有一个名为“禁用输出转义”的功能,它告诉序列化器将<a>输出为<a>,而通常会输出&lt;a&gt;。这是一个最好避免的黑客,出于多种原因,其中之一是它需要一个特殊的旁通道,以便转换引擎与串行器通信(因此变压器可以告诉串行器打开和关闭doe)。

在JAXP中,为了允许一个供应商的转换引擎与另一个供应商的串行器进行通信,传递这些doe-on和doe-off请求的协议就是这对处理指令。

您不需要此功能,您可以放心地忽略它的存在。永远不要试图想象只是因为某个功能存在,如果你从未使用它,你必须丢失一些东西。