【问题标题】:XSL rendering a value INSIDE a formXSL 在表单内呈现值
【发布时间】:2010-11-22 04:34:53
【问题描述】:

简短版:(希望您能“看到”我在这里尝试做的事情).... 我想将 XML 中的值“输出”到 XSL 中的表单字段中...

<input type="text" value='<xsl:value-of select="//return/ControlNo"/>' />  

这会引发错误...(见下文)


长版: 我有一个 XSL 页面从 XML 呈现页面......当他们“关闭”该页面时我需要“记录” - 我认为调用单独的页面 onUnload 将是最简单的方法......但是 - 我需要传递一个' ID' 到日志记录页面,因此 XSL 需要在 onUload 页面调用中传递值:

<BODY onUnload('logit.htm?ID= ...xsl:value-of...','logitwindow'); &gt;

或者 - 我提交了一个包含所需值的表单

<BODY onUnload(document.form.submit); >
<form><input type="hidden" name="id" value=" ...xsl:value-of... "></form>

我希望这是有道理的......谢谢

错误... javax.xml.transform.TransformerConfigurationException:javax.xml.transform.TransformerException:org.xml.sax.SAXParseException:与元素类型“input”关联的属性“value”的值不得包含“

【问题讨论】:

  • 好问题,+1。请参阅我的答案以获取解释和两种可能的解决方案。

标签: xml xslt


【解决方案1】:
<input type="text" value="{//return/ControlNo}" /> 

{} 是“value-of”的 xslt 快捷方式,相当于

<input type="text">
   <xsl:attribute name="value">
      <xsl:value-of select="//return/ControlNo" />
   </xsl:attribute>
</input>

如果您使用长格式,您可能必须将输出设置为 HTML,以便正确关闭 INPUT

【讨论】:

    【解决方案2】:
    <input type="text" value='<xsl:value-of
    

    select="//return/ControlNo"/>' />

    这会引发错误...

    这样做的问题是,在 XML 中,一个属性值不允许包含任何标记(标签),并且抛出的错误是对这种违规的响应。

    有两种正确的方法:短和长

    .1。 捷径。使用:

    <input type="text" value="{//return/ControlNo}"/>
    

    在属性值中使用{someExpression} 称为AVT -- Attribute-Value-Template。它会导致 someExpression 被评估并且评估结果替换此 AVT。

    .2。 任重道远。使用:

    <input type="text">
      <xsl:attribute name="value">
        <xsl:value-of select="//return/ControlNo"/>
      </xsl:attribute>
    </input>
    

    这是一个示例,如何使用 XSLT 指令 &lt;xsl:attribute&gt; 创建具有特定名称和特定值的属性。 created 属性必须紧跟在元素的创建之后(否则会抛出错误)。该属性将立即成为其后跟元素的属性。

    【讨论】:

    • 我认为你的“Long way”中有错字。它会导致错误。
    • @Chris-Bentley:谢谢,这就是复制和粘贴导致的结果......已修复。
    猜你喜欢
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多