列表为空时插入子节点(XForms)

时间:2013-03-28 23:35:15

标签: insert xforms

我的问题如下:

我通常有这些数据:

<structures>
    <structure id="10">
      <code>XXX</code>
    </structure>
</structures>

所以我显示的表格(单列:代码)没问题。

但在某些情况下,数据是没有内容的查询结果,因此数据为:

    <structures/>

导致我的桌子没有显示+错误。

我试图在空实例的情况下插入单个节点,以便数据看起来像:

<structures>
    <structure id="0"/>
</structures>

我正在尝试这样的事情:

<xforms:action ev:event="xforms-submit-done">
    <xforms:insert if="0 = count(instance('{./instance-name}')/root/node())" context="instance('{./instance-name}')/root/node()" origin="xforms:element('structure', '')" /> 
</xforms:action>

但在查看页面中检查器中的数据时没有插入任何节点。

我做错了什么明显的事情?

1 个答案:

答案 0 :(得分:0)

您的XPath ifcontext表达式中似乎存在错误:

if="0 = count(instance('{./instance-name}')/root/node())"
context="instance('{./instance-name}')/root/node()"

您使用大括号{},我假设具有属性值模板(AVT)的行为。但ifcontext表达式已经是XPath表达式,因此您不能在其中使用AVT。请尝试改为:

if="0 = count(instance(instance-name)/root/node())"
context="instance(instance-name)/root/node()"

此外,instance-name路径与读取或写入表达式时可能不清楚的内容相关。我建议使用绝对路径,例如instance('foo')/instance-name来使事情更清楚。

你没有提供其他实例的结构,所以我可以肯定,但你上面的表达式假设他们有以下形式:

<xf:instance id="foo">
    <some-root-element>
        <root>
            <structure/>
        </root>
    <some-root-element>
</xf:instance>

我不知道这是不是你想要的。

最后,您可以使用count(something) = 0替换empty(something)