XSL在表单中呈现值INSIDE

时间:2010-11-22 04:34:54

标签: xml xslt

短篇版本:(希望你能'看到'我想在这里做什么).... 我想将XML中的值“输出”到XSL中的表单字段...

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

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


长版: 我有一个XSL页面从XML渲染一个页面...当他们'关闭'那个页面时我需要'记录' - 我认为在Unload上调用一个单独的页面将是最简单的方法...但是 - 我需要传递一个' 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”的值不得包含'&lt;'字符。无法创建满足请求的配置的Transformer对象。这可能是由于编译XSL文本失败。 javax.xml.transform.TransformerConfigurationException:javax.xml.transform.TransformerException:org.xml.sax.SAXParseException:与元素类型“input”关联的属性“value”的值不得包含'&lt;'字符。

2 个答案:

答案 0 :(得分:2)

<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

答案 1 :(得分:2)

<input type="text" value='<xsl:value-of
     

选择= “//返回/ ControlNo”/&GT;” /&GT;

     

这会引发错误......

问题在于,在XML中,不允许属性值包含任何标记(标记),并且抛出的错误是对此违规的响应。

有两种方法可以正确执行此操作:短和长

0.1。 简短方法。使用:

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

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

0.2。 很长的路。使用:

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

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