我的问题如下:
我通常有这些数据:
<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>
但在查看页面中检查器中的数据时没有插入任何节点。
我做错了什么明显的事情?
答案 0 :(得分:0)
您的XPath if
和context
表达式中似乎存在错误:
if="0 = count(instance('{./instance-name}')/root/node())"
context="instance('{./instance-name}')/root/node()"
您使用大括号{
和}
,我假设具有属性值模板(AVT)的行为。但if
和context
表达式已经是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)
。