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;等转义后的字符串。

你可能感兴趣的:(ping)