gpt4 book ai didi

xml - XForms 和同一模型标签的多个输入

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:46 24 4
gpt4 key购买 nike

如果我没有正确地问这个问题,我会提前道歉..很难用语言表达我的问题..

我有 XForms 模型,例如:

<file>
<criteria>
<criterion></criterion>
</criteria>
</file>

我想要多个输入文本框来创建一个新的标准标签。

用户界面如:

<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>

我希望 XML 输出看起来像这样(一旦用户输入了信息):

<file>
<criteria>
<criterion>AAA</criterion>
<criterion>BBB</criterion>
<criterion>CCC</criterion>
</criteria>
</file>

我的方式不起作用,因为它认为 3 个输入字段都引用相同的标准标签。我如何区分?

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

开始第一次编辑

感谢基本文本框的回复!

但是,我现在需要使用列表框来完成此操作。但对于我的生活,我无法弄清楚如何。我在某处读到与 xforms:select 和 deselect 事件一起使用..但我不知道将它们放在哪里,我试过的地方给了我非常奇怪的行为。

我目前正在实现以下内容:

<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>

但是当提交多个选择时,所有选择值都被插入到同一个节点中,并以空格分隔。

例如:

如果从列表框中选择 AAA、BBB 和 FFF,将产生以下 XML:

<criterion>AAA BBB FFF</criterion>

如何更改我的代码以使每个选择都位于单独的节点中?

即我希望它看起来像这样:

<criterion>AAA</criterion>
<criterion>BBB</criterion>
<criterion>FFF</criterion>

谢谢!

结束第一次编辑

开始第二次编辑:

对于列表框(即 xf:select appearance="compact")我最终允许空格出现在同一节点中,然后使用 xsl 转换该 xml 以生成格式正确的新 xml 文档(具有单独的单独节点)。不幸的是,我没有通过将它们最初插入单独的节点来找到更简单的解决方案。

然而,所选答案对文本框非常有效,因此我选择它作为答案。

结束第二次编辑

最佳答案

如果三个标准对你来说足够了,那么你应该使用括号中的索引:

<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>

但是,如果您改用 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>

注意:这个带有 repeat 的例子需要一些修饰,这样你就不能删除表中的最后一行,并且可能隐藏最后一行,当你插入一个新的时,它是重复的。参见 http://en.wikibooks.org/wiki/XForms#Tabular_and_Repeating_Data更多示例。

关于xml - XForms 和同一模型标签的多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907830/

24 4 0