Orbeon表单生成器 - 提交时删除元素(xforms-submit)

时间:2013-06-21 11:03:58

标签: submit orbeon xforms

我正在使用Orbeon Form Builder生成表单。我想在保存表单时从模型中删除一个元素(最后一个)。

我尝试根据示例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 个答案:

答案 0 :(得分:1)

猜测,您最初的问题是您的XPath表达式没有选择要删除的元素。表达“guide / media”不会选择任何东西(除非有重要内容你没有向我们展示),因为“guide”是实例的最外层元素,而这是XPath中的默认上下文节点。

识别删除目标的规则很复杂,我从来没有学过它们,每次我需要删除任何内容时都必须查看示例。但是,执行删除的最简单方法(至少对我而言)是在nodeset属性中标识要删除的节点,并将“at”属性保留在其中。所以,如果是我,我会尝试

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

您还应检查以确保您的听众实际上是在听取此事件。将消息放入相同的操作是测试此问题的一种好方法,同时调试 - 如果您没有收到消息,很明显您有事件绑定问题而不是(或不仅仅是)XPath问题。