【问题标题】:XSLT single and double quotes in form input value attribute?表单输入值属性中的XSLT单引号和双引号?
【发布时间】:2011-06-02 20:56:23
【问题描述】:

希望是一个简短的问题,我怎样才能使它形成良好的格式并运行?

<input type="rad" name="RadGroup" value="<xsl:value-of select="productOptionInfo"/>" />

我基本上想在属性值内放置一个值,但它们都需要双引号!?

有什么想法吗?

非常感谢

【问题讨论】:

  • 好问题,+1。请参阅我的答案以了解为什么当前选择的答案是错误的,以及两个正确的 XSLT 1.0 解决方案和另一个 XSLT 2.0 解决方案。 :)

标签: xml xslt


【解决方案1】:

这是错误的

<input type="rad" name="RadGroup" 
       value="<xsl:value-of select='productOptionInfo'/>" /> 

这也是错误的

<input type="rad" name="RadGroup" 
       value='<xsl:value-of select="productOptionInfo"/>' />  

在 XML 中,将(未转义)标记作为属性值是一种语法错误。请参阅 W3 XML 规范 -- herehere

两种正确的方法是(称为 AVT 或 attribute value templates):

<input type="rad" name="RadGroup" value="{productOptionInfo}"/> 

<xsl:attribute name="input">
  <xsl:value-of select="productOptionInfo"/>
</xsl:attribute>

在 XSLT 2.0 中允许写入

<xsl:attribute name="input" select="productOptionInfo"/>

当元素的名称是静态已知的(预先)时,上述第一种方式是最短且最易读的

当元素名称不是静态已知时,必须使用第二种方法,并且必须使用&lt;xsl:element&gt; 指令生成。

【讨论】:

    【解决方案2】:

    在 XSLT 中,有一种在属性中使用值的快捷方式:

    <input type="rad" name="RadGroup" value="{productOptionInfo}" />
    

    还有另一个选项,它可以使用xsl:attribute

    <input type="rad" name="RadGroup">
        <xsl:attribute name="value">
           <xsl:value-of select="productOptionInfo"/>
        </xsl:attribute>
    </input>
    

    【讨论】:

    • @Mac - 我添加了更多选项 :)
    • 你的前两次尝试是绝对错误的。属性不能包含未转义的标记。请通过实际运行它们来验证您的解决方案。我不是你提到的反对者——我今天早上刚醒来——但他可能只是对这些缺陷做出了反应。
    【解决方案3】:

    使用大括号表示法:

    <input type="rad" name="RadGroup" value="{productOptionInfo}" />
    

    【讨论】:

    • 谢谢它的工作,你和奥德同时给了我正确的答案!
    【解决方案4】:

    您可以在内部使用单引号,在外部使用双引号,反之亦然。

    另外,XML 规范说:

    为了允许属性值同时包含单引号和双引号,撇号或单引号字符 (') 可以表示为“&amp;apos;”,双引号字符 (") 可以表示为“@987654323 @"。

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 2013-09-11
      • 2020-11-12
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 2013-03-24
      • 2023-03-25
      • 2021-12-09
      相关资源
      最近更新 更多