我有一个C#应用程序,它通过使用xsl文件转换xml文件来生成html文档。在我的xsl模板中,我引用了一个外部javascript文件,如下所示:
<script language="javascript" type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" ></script>
转换后,上一行被翻译为:
<script language="javascript" type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" />
对于Firefox和Chrome,这不是问题,但是IE会抛出“找不到对象”错误并且不起作用。有任何建议让IE喜欢这种语法吗?或者我需要在xsl(或C#XslCompiledTransform类)中做些什么才能保留语法?
解决方案:通过在脚本标记之间放置<![CDATA[ <!-- Some Comment --> ]]>
,解析器不会尝试缩短结束标记。
答案 0 :(得分:7)
尝试将空的CDATA部分放入其中。这应该强制解析器不要弄乱你的脚本标签。
<script language="javascript" type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" ><![CDATA[ ]]></script>
答案 1 :(得分:3)
实际上,bobince是对的。如果你使用......
<xsl:output method="html"/>
...您可以为 XslCompiledTransform 获取正确的输出,但您必须将 OutputSettings 与您用作输出对象的XmlWriter一起使用:
XslCompiledTransform xslt = new XslCompiledTransform(true);
xslt.Load("stylesheetFile.xsl");
XmlWriter outputWriter = XmlWriter.Create("outputfile.html", xslt.OutputSettings);
xslt.Transform(input, null, outputWriter);
这样, method =“html”就可以了,所以脚本textarea 等保留了结束标记。
答案 2 :(得分:2)
在<script>
:
<script type="text/javascript" src="..." ><xsl:comment/></script>
输出将是:
<script type="text/javascript" src="..."><!-- --></script>
在语义上等同于空<script>
。
答案 3 :(得分:2)
不保留它,但是如果你正在生成向后兼容的HTML,你需要告诉XSLT处理器HTML-compatible-XHTML是你想要的而不是通用的自关闭允许的XML:
<xsl:output method="xhtml"/>
不幸的是,'xhtml'输出方法是.NET的XslTransform不支持的XSLT 2.0扩展,所以你必须使用旧的旧版HTML:
<xsl:output method="html"/>
(和适当的HTML 4.01 DOCTYPE而不是XHTML。)
在<script>
中放置一些虚拟内容可以解决您的直接问题,但可能还有其他地方默认的'xml'输出方法会为IE等旧版浏览器生成不适当的标记。
回复:评论。嗯......你说得对! 'html'输出方法不会产生有效的HTML; 'xhtml'输出方法不会产生符合XHTML附录C的XHTML。更重要的是,'html'包括诸如不转义'&lt;'之类的规定,以及去除古老和破坏甚至是它的时间Netscape的规定4构造'&amp; {...}',这将使你的工作标记失效。
因此更改输出方法完全没用,并且使用XSLT生成工作HTML的唯一方法是:
一个。手动破解每次出现不合适的自动关闭标签(可能不仅仅是这个脚本),或者
湾使用HTMLTidy之类的后期处理。
即使在XSLT 2.0中也没有解决这个问题,这是多么悲伤和邋。。
答案 4 :(得分:1)
有同样的问题。现在,这是我的解决方案:
<xsl:text disable-output-escaping="yes">
<![CDATA[<script type="text/javascript" src="" ></script>]]>
</xsl:text>
答案 5 :(得分:0)
错过结束</script>.
答案 6 :(得分:0)
<xsl:output method="html" omit-xml-declaration="yes" doctype-system="about:legacy-compat" encoding="utf-8"/>
应解决您的问题