禁用输出转义不适用于xslt中的属性

时间:2011-10-25 09:05:59

标签: xslt attributes

我有以下xml节点:

<name>P &amp; P</name>

并遵循XSL

<a href="example.htm" >

    <xsl:attribute name="title">
       <xsl:value-of select="name" disable-output-escaping="yes"></xsl:value-of>
    </xsl:attribute>    


     <xsl:value-of select="name" disable-output-escaping="yes"></xsl:value-of>
</a>

编译为此HTML

<a href="example.com" title="P &amp;amp; P">
  P &amp; P
</a>

因此,非转义适用于值(<A></A>之间的文本),但不适用于属性。

我在这里错过了什么吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

来自OP的评论

  

我需要HTML标签的title属性中的这个xml(P&amp; P)。一个   更欢迎更好的解决方案!

如果没有D-O-E ,您可以完美地完成所需的工作。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <a href="example.htm" title="{.}">
       <xsl:value-of select="."/>
     </a>
 </xsl:template>
</xsl:stylesheet>

应用于以下XML文档

<t>P &amp; P</t>

产生了想要的正确结果:

<a href="example.htm" title="P &amp; P">P &amp; P</a>

答案 1 :(得分:1)

我一直在四处寻找,我想这就是原因:(如果我理解正确的话)?

超出规范:(http://www.w3.org/TR/xslt

  

对于文本节点禁用输出转义是错误的   用于结果树中除文本节点之外的其他内容。的 因此,   禁用xsl:value-of或的输出转义是错误的   xsl:用于生成a的字符串值的文本元素   注释,处理指令或属性节点; 它也是一个错误   将结果树片段转换为数字或字符串(如果)   结果树片段包含一个转义为的文本节点   禁用。在这两种情况下,XSLT处理器都可能发出错误信号;如果它   没有发出错误的信号,它必须通过忽略来恢复   disable-output-escaping属性。

因此,禁用输出以转义属性是不可能的。我看到的解决方法是将“手动”字符串构建为XSL - How to disable output escaping for an attribute?

仍然很难相信我没有错过某事。在这里微不足道。