如果我没有正确地问这个问题,我会提前道歉......很难说出我要问的内容.
我有XForms模型,如:
<file>
<criteria>
<criterion></criterion>
</criteria>
</file>
Run Code Online (Sandbox Code Playgroud)
我想有多个输入文本框,用于创建新的条件标记.
用户界面如:
<xf:input ref="/file/criteria/criterion" model="select_data">
<xf:label>Select</xf:label>
</xf:input>
<xf:input ref="/file/criteria/criterion" model="select_data">
<xf:label>Select</xf:label>
</xf:input>
<xf:input ref="/file/criteria/criterion" model="select_data">
<xf:label>Select</xf:label>
</xf:input>
Run Code Online (Sandbox Code Playgroud)
我希望XML输出看起来像这样(一旦用户输入信息):
<file>
<criteria>
<criterion>AAA</criterion>
<criterion>BBB</criterion>
<criterion>CCC</criterion>
</criteria>
</file>
Run Code Online (Sandbox Code Playgroud)
我拥有它的方式不起作用,因为它看到3个输入字段都指向相同的标准标记.我如何区分?
谢谢!我希望这有点道理!
开始第一次编辑
感谢基本文本框的回复!
但是,我现在需要使用列表框执行此操作.但对于我的生活,我无法弄清楚如何.我读到了与xforms一起使用的地方:选择和取消选择事件..但我不知道放在哪里,我尝试的地方给了我非常奇怪的行为.
我目前正在实施以下内容:
<xf:select ref="instance('criteria_data')/criteria/criterion" selection="" appearance="compact" >
<xf:label>Choose criteria</xf:label>
<xf:itemset nodeset="instance('criteria_choices')/choice">
<xf:label ref="@label"></xf:label>
<xf:value ref="."></xf:value>
</xf:itemset>
</xf:select>
Run Code Online (Sandbox Code Playgroud)
但是,当提交多个选项时,所有选择值都将插入到同一节点中,并以空格分隔.
例如:
如果从列表框中选择AAA和BBB和FFF,则会产生以下XML:
<criterion>AAA BBB FFF</criterion>
Run Code Online (Sandbox Code Playgroud)
如何更改代码以使每个选择都在单独的节点中?
即我希望它看起来像这样:
<criterion>AAA</criterion>
<criterion>BBB</criterion>
<criterion>FFF</criterion>
Run Code Online (Sandbox Code Playgroud)
谢谢!
完成第一次编辑
开始第二次编辑:
对于列表框(即xf:select appearance ="compact"),我最终允许空间出现在同一节点中,然后使用xsl转换该xml以生成格式正确的新xml doc(具有单独的单个节点).不幸的是,我没有通过将它们最初插入到单独的节点中而找到不那么麻烦的解决方案.
所选答案对于文本框非常有效,因此我选择它作为答案.
结束第二次编辑
小智 2
如果三个标准对您来说足够了,那么您应该使用括号中的索引:
<xf:input ref="/file/criteria/criterion[1]" model="select_data">
<xf:label>Select</xf:label>
</xf:input>
<xf:input ref="/file/criteria/criterion[2]" model="select_data">
<xf:label>Select</xf:label>
</xf:input>
<xf:input ref="/file/criteria/criterion[3]" model="select_data">
<xf:label>Select</xf:label>
</xf:input>
Run Code Online (Sandbox Code Playgroud)
但如果您使用 xf:repeat 代替,您可以添加所需数量的条件:
<xf:group ref="/file/criteria" mode="select_data">
<xf:repeat nodeset="criterion">
<xf:input ref=".">
<xf:label>Select</xf:label>
</xf:input>
</xf:repeat>
<xf:trigger>
<xf:label>Insert new row</xf:label>
<xf:insert nodeset="criterion" position="after" at="last()" ev:event="DOMActivate"/>
</xf:trigger>
<xf:trigger>
<xf:label>Delete last row</xf:label>
<xf:delete nodeset="criterion" at="last()" ev:event="DOMActivate" />
</xf:trigger>
</xf:group>
Run Code Online (Sandbox Code Playgroud)
请注意:这个带有重复的示例需要一些修饰,以便您无法删除表中的最后一行,并且可能隐藏最后一行,当您插入新行时,该行会重复。有关其他示例,请参阅http://en.wikibooks.org/wiki/XForms#Tabular_and_Repeating_Data 。