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

XPathifcontext式にエラーがあるようです:

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 に答える