7

假设我的 view.xml 中有以下表单数据实例:

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:exforms="http://www.exforms.org/exf/1-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xhtml:head>
<xforms:instance id="instanceData">
    <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <fruits>
     <fruit>
        <fruit-name>Mango</fruit-name>
     </fruit>
     <fruit>
        <fruit-name>Apple</fruit-name>
     </fruit>
     <fruit>
        <fruit-name>Banana</fruit-name>
     </fruit>
</fruits>
</form>
</xforms:instance>
</xhtml:head>

我想从上面的实例中选择所有的水果名称。我尝试了以下方法,但它总是选择第一个水果。

instance('instanceData')/fruits/fruit[*]/fruit-name
instance('instanceData')/fruits/fruit/fruit-name
instance('instanceData')/fruits/fruit[position()>0]/fruit-name

请提供一种在 XPATH 中克服此问题的方法

4

3 回答 3

14

尝试这个

             "//fruit-name"

它应该在文档层次结构中找到所有水果名称。

于 2011-03-03T11:10:53.797 回答
4

如果您想<fruit-name>从实例instanceData( <xforms:instance id="instanceData">) 中选择所有与您的问题相似的实例,则应执行以下操作:

instance('instanceData')/fruits/fruit/fruit-name

如果这不起作用,一个常见原因是您在包含您的实例的文档中有一个默认命名空间声明,例如:xmlns="http://www.w3.org/1999/xhtml". 如果你有这个,你需要撤消声明实例的默认命名空间声明,使用:

<xforms:instance xmlns="" id="instanceData">

(如果这是问题所在,我的建议是不要使用默认命名空间声明。永远。而是在任何地方声明xmlns:xhtml="http://www.w3.org/1999/xhtml"和使用xhtml前缀。)

于 2011-03-04T18:52:18.913 回答
0

第一:这可能是一个错字,以任何方式指出你的 xml 有错误的节点结尾

<service>

第二:您的 XPATH 非常有效,但是当您解析它时,您需要迭代结果集,就像它是一个节点序列而不是单个值。

例如)在 JDOM 中:< Element.selectObject Vs selectSingleNodes Vs selectAsArray 种类。

在您的 XForms 中,您需要遍历结果集以获取水果列表。

如果您只想要水果名称,那么您可以尝试

instance('instanceData')/fruits/fruit/fruit-name/text()
于 2011-03-03T14:26:21.533 回答