我正在使用XSLT将XML文档转换为XHTML,使用Saxon,符合XSLT 2.0标准。
在我的XML文档中,我有类似的节点(为简洁起见,这里是截断的):
<script type="text/javascript">
document.write('<script>')
</script>
我希望能够做的是对转义的字符进行unesacape,以便<
成为<
而>
成为>
,理想情况下只有当它们出现在脚本中时节点。
最终输出将是:
<script type="text/javascript">
document.write('<script>')
</script>
这可能,以及如何提出建议吗?
答案 0 :(得分:3)
使用html
序列化方法,script
内容不会被转义。
来自http://www.w3.org/TR/xslt#section-HTML-Output-Method
html
输出方法不应该 逃避内容script
和style
元素
<强>更新强>
正如@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)