0

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

我已尝试根据此链接中的示例创建删除操作,但无法使其正常工作

给定实例

<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 数据中。

4

1 回答 1

1

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

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

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

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

于 2013-06-21T20:09:24.490 回答