当前位置: 代码迷 >> Web前端 >> XSL中disable-output-escaping的施用
  详细解决方案

XSL中disable-output-escaping的施用

热度:628   发布时间:2012-10-26 10:30:58.0
XSL中disable-output-escaping的使用

??? disable-output-escaping是XSL中的重要属性,用于指示是否将escaping(转义字符如:&<>) 作为xml进行解析。

<description>
	Ferris &amp; <a href="http://willa.com">Willa</a>
</description>

?上述代码的解析结果:

??? disable-output-escaping="yes"或者"no",都被解析为:

? ??Ferris & Willa? 因为<a>没有被解析成连接,而是被作为XML的一个节点解析了。

?

? 此时,如果description元素中有单独的& <符号,解析时会报错!因为是非法的。

?

<description>
	Ferris &amp; &lt;a href="http://willa.com">Willa&lt;/a>
</description>

?上述代码解析结果:

?? ?disable-output-escaping="yes",解析为:

?? ?Ferris & Willa??&lt;被解析成<,继而被解析成链接

?? ?disable-output-escaping="no"或者不设置该属性,解析为:

?? ?Ferris & <a href="www">www</a>? &lt;将不被解析成<

?

??通过上述实例,我们发现两个问题:

? 1.在XML元素中的写标签(如上述的<a>)将不会被作为text解析,而是作为节点来解析。如果想写XML字符串,必须以&lt;来表示<。如果想直接写XML字符串或者&、<等字符,可以考虑在元素中的<![CDATA[??? ]]>中直接写。例如:

<description><![CDATA[
	Ferris & <a href="http://willa.com">Willa</a>]]>
</description>

?? 此时,如果disable-output-escaping="no",则显示:Ferris & <a href="http://willa.com">Willa</a>

???disable-output-escaping="yes",则显示:Ferris & Willa

? 2.在XML元素中的text中不能还有独立的&字符,否则会报错。

?

??? 在<![CDATA[? ]]>中可以随便写什么,且如果d-o-e="no"时所写的就是将来所看到的,当d-o-e="yes"时会将其中的标签(<a href="#">Willa</a>)解析为html标签进行显示,将&lt;a>Willa&lt;a>这样的转义过的字符串显示为<a>Willa</a>。

?

??? 在元素中不能单独写特殊符号(写&,<会报错),且在元素中直接写的标签(<a href="#">Willa</a>)将作为XML节点解析,当试图去获取当前节点中的文本时,将得到Willa而不是<a href="#"></a>。在元素中的转义过的字符串,当d-o-e="yes"时将被解析为字符串代表的html内容,否则被解析为字符串本身。

?

??? 在应用开发中,经常会遇到对字符串中的特殊字符进行转换,如将&转换为&amp; ,将<转换为&lt;。需要注意的是,后台如果进行过这样的转换,那么在包含字符串时,就避免使用<![CDATA[? ]]>,否则前台读取到的结果就是&lt;&amp;等转义后的字符串。

  相关解决方案