2013-06-21 40 views
0

我使用Orbeon Form Builder生成表單。我想在保存表單時從模型中刪除一個元素(最後一個元素)。Orbeon Form Builder - 提交時刪除元素(xforms-submit)

我試圖在實例創建刪除操作的基礎in this link,但不能讓它的工作

鑑於實例

<xf:instance id="fr-form-instance"> 
    <guide> 
    <title/> 
    <media> 
     <format>image</format> 
    </media> 
    <media> 
     <format>video</format> 
    </media>      
    </guide> 
</xf:instance> 

我有我的內下列刪除操作,以刪除最後一個媒體元件

<xf:delete ev:event="xforms-submit" nodeset="guide/media" at="last()"/> 

但它不起作用。

我也試圖改變的XPath

<xf:delete ev:event="xforms-submit" nodeset="media" at="last()"/> 

和包裹在一個動作

<xf:action ev:event="xforms-submit"> 
    <xf:delete nodeset="guide/media" at="last()"/> 
</xf:action> 

,但仍然沒有喜悅!

的XForm的是有效的,可以保存數據,它只是第二媒體元素仍然出現在最後的XML數據。

回答

1

有人猜測,你最初的問題是你的XPath表達式沒有選擇你想要刪除的元素。由於「guide」是實例的最外層元素,並且這是XPath中的默認上下文節點,所以「guide/media」表達式不會選擇任何內容(除非有什麼重要的東西不會顯示給我們)。

確定刪除目標的規則很複雜,我從來沒有學過它們,每次我需要刪除任何東西時都要看例子。但是執行刪除操作的最簡單方法(至少對我來說)是在nodeset屬性中標識要刪除的節點,並將'at'屬性留在其中。因此,如果是我,我會嘗試

<xf:delete ev:event="..." 
      nodeset="media[last()]"/> 

您還應該檢查以確保您的聽衆實際上正在聽到該事件。將消息放入同一個動作中是一種很好的方法來在測試時進行測試 - 如果您沒有收到消息,很明顯您遇到了事件綁定問題,而不是(或者不僅僅是)XPath問題。

+0

好的會嘗試這個,雖然我根據Orbeon站點鏈接中的例子推導出XPath。 –

+0

這沒有奏效,所以我認爲在我們的Orbeon安裝工作中存在一些問題。 –

+0

嘗試更加明確:'nodeset =「instance('fr-form-instance')/ media [last()]」' – ebruchez

相關問題