xslt、javascript和未设置场景的html实体
我对xslt、js和html实体有一个小问题,例如,在模板中:xslt、javascript和未设置场景的html实体,javascript,xslt,html-entities,Javascript,Xslt,Html Entities,我对xslt、js和html实体有一个小问题,例如,在模板中: <script type="text/javascript"> <xsl:value-of select="/some/node"/> for (var i = 0; i < 5; i++) { // ^^^ js error } </script> <script type="text/javascript"&g
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
for (var i = 0; i < 5; i++) {
// ^^^ js error
}
</script>
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
for (var i = 0; i < 5; i++) {
// ^ xslt error
}
</script>
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
// <![CDATA[
for (var i = 0; i < 5; i++) {
// ^ becomes <
}
// ]]>
</script>
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
for (var i = 0; i <xsl:value-of disable-output-escaping="yes" select="string('<')"/> 5; i++) {
// works of course
}
</script>
对于(变量i=0;i 5;i++){
//^^^^js错误
}
对于(变量i=0;i<5;i++){
//^xslt错误
}
//
对于(变量i=0;i 5;i++){
//当然可以
}
有人知道我的问题来自哪里吗?我一直认为xslt处理器在使用html输出方法时会使元素的内容不被替换
我在OSX上运行libxslt2版本1.1.24,该版本是使用macportsports安装的…CDATA块应该可以工作;他们总是给我钱。您的
禁用输出转义值是多少
更新:
使用Xalan,默认设置为禁用输出转义
,我很确定这是否
,我的工作XSL文件中有以下内容:
- 无
CDATA
块:
for (var i = 0; i `<` foo.length; i++) {
…
}
<![CDATA[
for (var i = 0; i < foo.length; i++) { … }
]]>
CDATA
block:
for (var i = 0; i `<` foo.length; i++) {
…
}
<![CDATA[
for (var i = 0; i < foo.length; i++) { … }
]]>
尝试删除第三个解决方案的CDATA之前的双斜杠
我一直认为xslt处理器在使用html输出方法时会使脚本元素的内容不被替换
你是对的:
html输出方法不应对脚本和样式元素的内容执行转义。
例如,在样式表中编写的文本结果元素
如果(a b)foo()
或
应输出为
如果(a
如果XSLT处理器不这样做,那就是一个bug
然而,在任何情况下,避免“ok”都是一个好主意。长话短说:
在某些libxslt版本中,xslt处理器在使用html输出方法时,与其他版本一起使用时,似乎会保留元素的内容
不。。。因此,建议采取以下措施:
<script type="text/javascript">
<xsl:value-of select="/some/node"/>
<xsl:text disable-output-escaping="yes">
// ^ does the trick ...
for (var i = 0; i < 5; i++) {
// ^ works
}
</xsl:text>
</script>
//^有什么诀窍吗。。。
对于(变量i=0;i<5;i++){
//^工作
}
如果xsl:output
方法是html,则CDATA部分可以工作。如果xsl:output
方法是xml,那么符号仍然会被转换
为了解决这个问题,可以使用xsl:output元素将script元素定义为不以这种方式工作。您还可以使用xml或html强制输出方法
<xsl:output method="xml" cdata-section-elements="script" />
...
<script type="text/javascript" language="javascript">
<![CDATA[
for (var i = 0; i < foo.length; i++) { … }
]]>
</script>
...
您的意思是使用以下命令:可以,但这不是应该的工作方式,对吗?(回答已删除,不再相关)如果XSLT正在生成变量JS脚本,则链接JS文件并不总是可能的,并且避免元素的内容必须由格式良好的字符数据或标记组成。
并且它指向带有的行。这在我的情况下不起作用,我在输出中得到的是&;lt代码>,我的输出类型是html