如何做xforms:插入而不需要xforms:删除结尾?

时间:2016-10-03 10:30:43

标签: orbeon xforms xsltforms xforms-betterform

<xf:action ev:event="xforms-model-construct">
    <xf:insert nodeset="instance('subInstance')/type" origin="instance('defaultType')/type"/>
</xf:action>

我想基于另一个实例填充实例。我可以使用xf:insert执行此操作,如上所示。

但是,我意识到实例'subInstance'在启动xf:inserts之前必须包含一个空类型元素。

<subInstance>
  <type/>
</subInstance>

所以在完成所有xf:insert之后,我需要执行以下操作来删除第一个空的:

<xf:delete nodeset="instance('subInstance')/type" at="1" />

这个方法有什么问题,或者有没有一种方法可以在没有初始空的情况下直接插入?

1 个答案:

答案 0 :(得分:1)

两个答案:

您实际上不需要初始类型元素

您的原始实例可以是:

<subInstance/>

然后您可以使用

插入 subInstance元素
<xf:action ev:event="xforms-model-construct">
    <xf:insert
        context="instance('subInstance')"
        origin="instance('defaultType')/type""/>
</xf:action>

使用不contextnodeset的{​​{1}}表示您要将插入<{em> ref指向的节点。

您仍然可以使用XForms 2.0支持

执行您想要的操作

如果你想保留原始的嵌套context元素,你可以这样写:

type
  1. 通过定位目标实例的根元素,将替换整个实例。 XForms 1.1就是这种情况。
  2. 使用<xf:action ev:event="xforms-model-construct"> <xf:insert nodeset="instance('subInstance')" origin=" xf:element( 'subInstance', instance('defaultType')/type ) "/> </xf:action> 属性使用XForms 2.0中的xf:element()函数,您可以动态创建一个以origin为根的XML文档,其中只包含subInstance个元素。 type实例。
  3. 为了使这更加现代化,您可以将defaultType替换为nodeset,因为在XForms 2.0中不推荐使用ref

    nodeset