当前位置:  开发笔记 > 编程语言 > 正文

即使在转义字符后也无法让xslt输出(&)

如何解决《即使在转义字符后也无法让xslt输出(&)》经验,为你挑选了4个好方法。

我试图创建一个由&符号分隔的变量赋值的查询字符串(例如:)"var1=x&var2=y&...".我计划将此字符串传递给嵌入式Flash文件.

我无法&在XSLT中显示符号.如果我只输入&没有标签,那么渲染XSLT文档就会出现问题.如果我键入&时没有标签,那么文档的输出&没有变化.如果我输入我也收到错误.这可能吗?注意:我也尝试&过没有成功.



1> Kevin Hakans..:

您可以结合disable-output-escaping使用CDATA部分.试试这个:




2> Dimitre Nova..:

我试图创建一个由&符号分隔的变量赋值的查询字符串(例如:)"var1=x&var2=y&...".我计划将此字符串传递给嵌入式Flash文件.

我无法&在XSLT中显示符号.

这是一个可运行,简短而完整的演示如何生成这样的URL:


 

 
 
 

  
    
  

当此转换应用于任何源XML文档(忽略)时:


产生了想要的正确结果:

http://www.myUrl.com/?vA=a&vX=x&vY=y&vZ=z

至于问题中提出的其他问题:

如果我键入&时没有标签,那么文档的输出&没有变化.

上述陈述根本不是真的......只需运行上面的转换并查看结果即可.

真正发生的事情:

您看到的结果是绝对正确的,但是您的输出方法是htmlxml(默认值method=),因此XSLT处理器的序列化程序必须表示正确的结果 - 字符串http://www.myUrl.com/?vA=a&vX=x&vY=y&vZ=z - 作为(部分)文本节点格式良好的XML文档或HTML树.

根据格式良好的XML文档中的定义,文字符号必须通过字符引用进行转义,例如内置的&或者&,或者&

请记住:表示为XML文本节点(的一部分)或HTML树中的字符串在表示为文本时可能看起来不像是相同的字符串.然而,这些是相同字符串的两种不同表示.

要更好地理解这个简单的事实,请执行以下操作:

采取上述转换并替换xsl:output声明:

 

这一个:

 

此外,将输出包围在单个XML元素中.您也可以尝试使用不同的逃生用于&符号.转换现在可能如下所示:


 

 
 
 

  
        
            
        
  

结果是:

http://www.myUrl.com/?vA=a&vX=x&vY=y&vZ=z

您将使用输出方法获得相同的结果html.

问题:

输出的URL是否与第一次转换中的输出不同(甚至"损坏")?

答案:

不,在两种情况下都输出相同的字符串 - 但是在每种情况下都使用了不同的字符串表示.

问题:

我必须使用DOE(disable-output-escaping="yes")属性才能输出所需的URL吗?

答案:

不,如第一次转型所示.

问题:

是否建议使用DOE(disable-output-escaping="yes")属性来输出所需的URL?

答案:

不,使用DOE在XSLT中是一种不好的做法,通常是程序员没有很好地掌握XSLT处理模型的信号.此外,DOE只是XSLT 1.0的一个可选功能,有可能您的XSLT处理器没有实现DOE,或者即使它实现了DOE,您可能会遇到与另一个XSLT处理器运行相同转换的问题.

我来自一个不同的问题,我提出了一个赏金的问题.我的问题:我尝试生成这个onclick方法:

    

我可以做的是:我可以将确认放在一个函数中......但是我知道我无法创建一个&一个属性!这个问题的解决是我认为解决我的问题.

回答

实际上,您可以&&通过将其表示为属性内的JavaScript表达式内的布尔运算来指定&&

这是一个完整的例子,每个人都可以运行,就像我在三个浏览器上一样:Chrome,Firefox 41.1.01和IE11:

HTML:

 

     
       
         
         
       
       
        

Hello Plunker!

JavaScript(script.js):

function confirm(message) { 
  alert(message); 
  return message === 'are you sure?'; 

}

当你运行它时,你将首先得到这个警报:

在此输入图像描述

然后,在单击OK按钮后,您将收到第二个警报:

在此输入图像描述

点击后OK你最终会获得产生&&操作结果的警报:

在此输入图像描述

您可以通过改变传递给confirm()函数的参数的值来使用此代码,并验证生成的结果是否使用&&运算符.

例如,如果将元素更改为:

 

你会得到第一个这个警报:

在此输入图像描述

当您单击时OK,您将立即获得操作的最终结果&&:

在此输入图像描述

跳过第二个警报,因为操作的第一个操作数&&是,false并且JavaScript正在缩写&&第一个操作数所在的位置false.

总结一下:

&&通过将&&操作数指定为,可以很容易地在XSLT生成的HTML文档中的属性内使用运算符&&



3> 小智..:

您是在HTML或XHTML中表达URI吗?例如, 如果是这样," &"是在属性值中表示&符号的正确方法,即使它看起来与您想要的文字URI不同.浏览器将&在加载它们或将它们传递给Flash之前解码" "和任何其他字符实体引用.要嵌入文字,单独的" &"直接在HTML或XHTML中是不正确的.

我个人也建议学习更多关于XML的知识,以便更清楚地思考这些事情.例如,尝试更多地使用W3C DOM(不仅仅是简单的Javascript); 即使您不是日常使用它,学习DOM也可以帮助我正确地思考XML的树结构以及如何正确地考虑编码属性和元素.



4> Thunder3..:

disable-output-escaping="yes"value-of标签中使用

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有