2012-07-05 26 views
1

我無法找到將重複的節點值複製到另一個重複節點的好方法。在通用編程語言中,我的意思是說將一個數組的內容複製到另一個數組中。如何將重複的節點值複製到Orbeon中的另一個重複節點

  <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值複製到第1 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> 
+1

請問編輯問題並提供確切的通緝結果?我懷疑這是使用XSLT的微不足道的。你會考慮一個XSLT解決方案嗎? –

+0

@Dimitre:對不起,我的inital xml節點名稱是錯誤的,我現在糾正了這個問題。謝謝 – Jayy

+0

@DimitreNovatchev:我不確定是否可以在xforms中使用XSLT解決方案 – Jayy

回答

2

您正在尋找的iterate attribute 介紹在即將到來的XForms 2.0中,但已經得到了Orbeon Forms的支持,您似乎正在使用基於您的問題標籤的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> 

使用此代碼也看到一個full example


此功能已經支持長,你不得不使用xxforms:iterate="…"表示這是一個擴展,但由於這是不久將成爲標準,你現在可以只使用iterate="…"

+0

太棒了。我幾乎在那裏,但我沒有使用像你這樣的變量。提供的完整示例非常感謝,因爲它對許多新手都有用。謝謝! – Jayy

+0

非常好,謝謝你確認這對你有效,我很高興這有幫助。 – avernet