如何在最后不需要 xforms:delete 的情况下执行 xforms:insert?

Posted

技术标签:

【中文标题】如何在最后不需要 xforms:delete 的情况下执行 xforms:insert?【英文标题】:How to do an xforms:insert without the need of xforms:delete at the end? 【发布时间】:2017-02-11 06:36:10 【问题描述】:

<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:inserts 之后,我需要执行以下操作来删除第一个空的:

&lt;xf:delete nodeset="instance('subInstance')/type" at="1" /&gt;

这种方法有什么问题吗,或者有没有办法可以直接插入而不需要初始为空?

【问题讨论】:

【参考方案1】:

两个答案:

你真的不需要初始类型元素

您的原始实例可以是:

<subInstance/>

然后你可以插入 subInstance 元素:

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

使用context 而不使用nodesetref 表示您要插入context 指向的节点。

在 XForms 2.0 支持下,您仍然可以做您想做的事

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

<xf:action ev:event="xforms-model-construct">
    <xf:insert
        nodeset="instance('subInstance')"
        origin="
            xf:element(
                'subInstance',
                instance('defaultType')/type
            )
        "/>
</xf:action>
    通过定位目标实例的根元素,整个实例将被替换。 XForms 1.1 就是这种情况。 通过 origin 属性使用 XForms 2.0 中的 xf:element() 函数,您可以动态地创建一个以 subInstance 为根并仅包含来自 defaultType 实例的 type 元素的 XML 文档。

为了使其更加现代,可以将 nodeset 替换为 ref,因为在 XForms 2.0 中不推荐使用 nodeset

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

【讨论】:

谢谢。第一个答案(上下文)是我正在寻找的。​​span>

以上是关于如何在最后不需要 xforms:delete 的情况下执行 xforms:insert?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 Bash 别名?

关于ansys 如何输公式,有会的情帮下忙,急用

oAuth访问令牌

如何在 spyder 中恢复未保存的文件

博弈论——最后通牒与讨价还价

如何在核心数据关系真正改变之前观察它?