XSLT中添加window resize条件报错:名称不能以空格开头的解决问询
解决XSLT中嵌入响应式轮播JS的XML解析错误
这个错误的根源是XSLT作为XML格式的文档,会自动解析script标签内的文本内容,当你的JavaScript代码里包含<这类XML特殊字符时(哪怕你转成了<),XML解析器可能还是会误把代码片段当成XML元素来处理,最终抛出"Name cannot begin with the ' ' character"这类解析错误。
最可靠的解决方案:用CDATA块包裹JavaScript代码
在XSLT中嵌入JS时,把所有JS代码放在<![CDATA[ ... ]]>块里,告诉XML解析器:"这段内容是纯文本,不要解析它",这样就能彻底避免XML语法冲突。
修正后的代码如下:
<script type="text/javascript"> <![CDATA[ $(document).ready(function() { $("#carousel").waterwheelCarousel({ forcedImageWidth: 700, forcedImageHeight: 555, separation: 500 }); }); $(window).resize(function(){ if(window.innerWidth < 1024){ $("#carousel").waterwheelCarousel({ forcedImageWidth: 400, forcedImageHeight: 255, separation: 100 }); } else { alert('hi'); } }); ]]> </script>
为什么之前的写法会出错?
你尝试用<转义<,但在XSLT的script标签中,XML解析器仍然会扫描整个内容的结构。当解析器遇到<之后的内容时,可能会错误地将后续的空格和代码片段识别为XML元素的名称——而XML规定元素名称不能以空格开头,这就是你看到的报错原因。
额外注意事项
- 确保CDATA块正确闭合:不要在JS代码里出现
]]>(如果必须用,需要拆分成]]><
