简单的Xpath - 在XBL中读取子元素

时间:2010-11-23 15:19:57

标签: xforms

我正在使用orbeon,我正在尝试读取XBL中定义的子元素。这是我的xform定义的样子

<fr:foobar ref="mynode" constraint="unique">
  <fr:foo from="abc" to="def">
    <fr:bar key="id" name="primary" />
  </fr:foo>
</fr:foobar>

在XBL中,我似乎找不到一种简单的方法来读取子元素。我显然错过了一些简单的事情。

<xforms:group xxbl:scope="inner">
    <!-- works -->
    <xxforms:variable name="foocontext">
        <xxforms:sequence select="{fr:foo/@from}" xxbl:scope="outer" />
    </xxforms:variable>

    <!-- does not works -->    
    <xxforms:variable name="barcontext" as="node()?">
        <xxforms:sequence select="{fr:foo/fr:bar}" xxbl:scope="outer" />
    </xxforms:variable>
</xforms:group>

1 个答案:

答案 0 :(得分:1)

AVT始终返回文本。因此{fr:foo/fr:bar}相当于{string(fr:foo/fr:bar)},在这种情况下,它不会达到预期效果。这是一个棘手的问题,我看到了两个解决方案:

  1. 不要定义XForms变量。而是在XSLT中迭代结构,并生成您想要生成的任何XForms。这是“最有可能”最好的出路(但不要相信我所说的,因为我甚至不知道你要做什么!)。
  2. 如果您确实需要该变量,则需要将这些<fr:bar>元素复制到具有XSLT(<xsl:copy-of>)的实例中,然后使用{{1指向该实例中的节点}}。