我有以下xml节点:
<name>P & 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; P">
P & P
</a>
因此,非转义适用于值(<A></A>
之间的文本),但不适用于属性。
我在这里错过了什么吗?
谢谢!
答案 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 & P</t>
产生了想要的正确结果:
<a href="example.htm" title="P & P">P & 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?
仍然很难相信我没有错过某事。在这里微不足道。