假设我的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中克服此问题的方法
答案 0 :(得分:7)
试试这个
"//fruit-name"
它将在文档层次结构中找到所有水果名称。
答案 1 :(得分:3)
如果您要从实例<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
前缀。)
答案 2 :(得分:0)
第一: 它可能是一个错字任何方式指出你xml有错误的节点结束
<service>
第二: 你的XPATH是非常有效的,但是当你解析它时,你需要迭代结果集,就像它的节点序列而不是单个值一样。
例如,在JDOM中:&lt; Element.selectObject和selectSingleNodes对selectAsArray类型。在您的XForms中,您需要遍历结果集以获取结果列表。
如果您只想要水果名称,那么您可以尝试
instance('instanceData')/fruits/fruit/fruit-name/text()