【问题标题】:Disable output escaping not working for attribute in xslt禁用输出转义不适用于 xslt 中的属性
【发布时间】:2011-10-25 09:05:58
【问题描述】:

我有以下 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>

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

我错过了什么吗?

谢谢!

【问题讨论】:

    标签: xslt attributes


    【解决方案1】:

    来自 OP 的评论

    我需要在 HTML 标记的标题属性中使用此 xml (P & 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 :因为你是对的。但是,我简化了这个例子,在我的例子中。不同的事情正在发生。我现在必须弄清楚什么。发送。
    • @Peter:那么你必须提供一个更精确的例子。您当前的问题已完全回答。
    • @Dimtitre,实际上的问题是“为什么输出转义不能在 xslt 中工作?”我想正确的答案是:“因为它是这样设计的”。不过,如果我有时间,我会提供一个精确的例子,否则,我稍后会很高兴地接受你的回答。德克萨斯州。在任何情况下为您的麻烦。
    • @Peter:是的,D-O-E 仅在文本节点中定义——而不是属性。我的回答解决了您的评论,您在其中陈述了您真正想要实现的目标,并提供了一个 D-O-E-less 解决方案:)
    • 由于“不,这不可能”的答案有点蹩脚,我接受你的回答作为我的命令的真正答案。我仍然希望如果我有时间发布更好的示例,您也会帮助我。
    【解决方案2】:

    我一直在环顾四周,我想这就是为什么:(如果我理解正确的话)?

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

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

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

    仍然很难相信我没有错过某事。这里很琐碎。

    【讨论】:

    • 正确,d-o-e 不适用于属性。问题是,你为什么首先使用 d-o-e?有一些有效的用例,但在大多数情况下,这是一个丑陋的 hack,可能会有更好的解决方案。
    • 我需要在 HTML 标签的 title 属性中使用这个 xml (P & P)。欢迎提供更好的解决方案!
    • 没有“手动构建字符串”的方法是必要的——见我的回答。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多