1

我找不到将重复节点值复制到另一个重复节点的好方法。在通用编程语言中,我的意思是将一个数组的内容复制到另一个数组。

            <xforms:instance id="main-instance">
                <contacts>
                    <contact>
                        <contact-id>111</contact-id>
                        <contact-name></contact-name>
                        <contact-location></contact-location>
                    </contact>
                    <contact>
                        <contact-id>222</contact-id>
                        <contact-name></contact-name>
                        <contact-location></contact-location>
                    </contact>
                    <contact>
                        <contact-id>333</contact-id>
                        <contact-name></contact-name>
                        <contact-location></contact-location>
                    </contact>
                </contacts>

                <alternate-contacts>
                    <contact>
                        <alt-contact-id></alt-contact-id>
                        <control-id></control-id>
                        <control-rules></control-rules>
                        <tranmission-method></tranmission-method>
                    </contact>
                    <contact>
                        <alt-contact-id></alt-contact-id>
                        <control-id></control-id>
                        <control-rules></control-rules>
                        <tranmission-method></tranmission-method>
                    </contact>
                    <contact>
                        <alt-contact-id></alt-contact-id>
                        <control-id></control-id>
                        <control-rules></control-rules>
                        <tranmission-method></tranmission-method>
                    </contact>
                </alternate-contacts>
            </xforms:instance>

当检查复选框(事件开始操作)时,我应该将第一contact-id值复制到第一个值alt-contact-id,依此类推。

            <xforms:action ev:event="xforms-value-changed">
                //TO DO here
            </xforms:action>

请提供你的想法

编辑:所以当复选框被选中时,<alternate-contacts>节点应该是这样的

                <alternate-contacts>
                    <contact>
                        <alt-contact-id>111</alt-contact-id>
                        <control-id></control-id>
                        <control-rules></control-rules>
                        <tranmission-method></tranmission-method>
                    </contact>
                    <contact>
                        <alt-contact-id>222</alt-contact-id>
                        <control-id></control-id>
                        <control-rules></control-rules>
                        <tranmission-method></tranmission-method>
                    </contact>
                    <contact>
                        <alt-contact-id>333</alt-contact-id>
                        <control-id></control-id>
                        <control-rules></control-rules>
                        <tranmission-method></tranmission-method>
                    </contact>
                </alternate-contacts>
4

1 回答 1

2

您正在寻找 XForms 2.0 即将推出的iterate属性1,但 Orbeon Forms 已经支持该属性,您似乎正在根据问题上的标签使用该属性。有了它,你可以写:

<xforms:action iterate="/root/contacts/contact">
    <xforms:var name="position" value="position()"/>
    <xforms:var name="id" value="contact-id"/>
    <xforms:setvalue ref="/root/alternate-contacts/contact[$position]/alt-contact-id" value="$id"/>
</xforms:action>

另请参阅使用此代码的完整示例。


1这个特性已经被支持很久了,你必须使用xxforms:iterate="…"来表示这是一个扩展,但是由于这很快就会成为标准,你现在可以只使用iterate="…".

于 2012-07-20T00:04:22.747 回答