在XSLT转换期间的Unescape

时间:2011-01-14 16:20:11

标签: xml xslt xslt-2.0

我正在使用XSLT将XML文档转换为XHTML,使用Saxon,符合XSLT 2.0标准。

在我的XML文档中,我有类似的节点(为简洁起见,这里是截断的):

  <script type="text/javascript"> 
  document.write('&lt;script&gt;')
  </script> 

我希望能够做的是对转义的字符进行unesacape,以便&lt;成为<&gt;成为>,理想情况下只有当它们出现在脚本中时节点。

最终输出将是:

  <script type="text/javascript"> 
  document.write('<script>')
  </script> 

这可能,以及如何提出建议吗?

2 个答案:

答案 0 :(得分:3)

使用html序列化方法,script内容不会被转义。

来自http://www.w3.org/TR/xslt#section-HTML-Output-Method

  

html输出方法不应该   逃避内容   scriptstyle元素

<强>更新

正如@Michael Kay博士评论的那样,如果你为了解XHTML的浏览器生成XHTML(以及使用正确的MIME类型发送),那么你不必担心失败。此外,应该指出内联脚本不被视为良好实践。

如果您仍希望使用xml序列化方法生成针对旧版浏览器的XHTML指南,则可以将script内容声明为CDATA部分。

来自http://www.w3.org/TR/xslt#section-XML-Output-Method

  

cdata-section-elements属性   包含以空格分隔的列表   QNames每个QName都扩展为   使用命名空间的扩展名   有效的声明   xsl:output元素   QName发生;如果有默认值   命名空间,它用于QNames   没有前缀。扩张是   在合并之前执行   将多个xsl:output元素转换为   单一有效xsl:output元素。   如果是父的扩展名   文本节点是列表的成员,   那么文本节点应该输出为   CDATA部分

例如:

<xsl:output cdata-section-elements="xhtml:script xhtml:style"
            xmlns:xhtml="http://www.w3.org/1999/xhtml"/>

答案 1 :(得分:1)