0

我的问题如下:

我通常有这些数据:

<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>

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

有什么明显的我做错了吗?

4

1 回答 1

0

if您的 XPath和context表达式中似乎存在错误:

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

您是使用大括号{},我假设具有属性值模板 (AVT) 的行为。但是ifandcontext表达式已经是 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)

于 2013-03-29T17:57:08.340 回答