2015-12-01 83 views
0

我有以下XML文件:XPATH选择多个值

<a ida="1"> 
    <b>data</b> 
    <c idc="1"> 
     <d>data</d> 
     <e ide="1"> 
      <f>data</f> 
     </e> 
     <e ide="2"> 
      <f>data</f> 
     </e> 
    </c> 
</a> 

<a ida="2"> 
    <b>data</b> 
    <c idc="2"> 
     <d>data</d> 
     <e ide="3"> 
      <f>data</f> 
     </e> 
     <e ide="4"> 
      <f>data</f> 
     </e> 
    </c> 
</a> 

我想通过XPATH检索B元素以及C的所有的电子孩子的他们f元素。

为了做这样的事情用XQuery:

xquery version "3.0"; 
for $x in doc("file.xml")//a//c//e 
order by $x//f ascending 
return <res>{$x/../../b, $x//f}</res> 

在XPATH我只能选择一个元素:

doc("askhsh.xml")//a//c//e//f 
+0

从您在下面的答案中的意见,你想要一个XPath解决方案,而不是XQuery的权利?你使用什么版本的XPath? – har07

+0

我不知道如何检查,但我有最新版本的baseX,如果有帮助。 – fxuser

+0

第一个问题呢,你在追求的是XQuery还是XPath解决方案? (因为BaseX主要与XQuery一起使用,而不仅仅是XPath) – har07

回答

0

下面是英文的XPath您正在寻找:

//a/b | //a/c/e 
+0

这将打印出所有的b,然后是所有的e ...是否可以在c后显示所有的b?谢谢。 – fxuser

0

对不起,但它不是很清楚你想从查询中得到什么结果。我最好的猜测是这样的

xquery version "3.0"; 
for $x in doc("so.xml")//a 
    let $b := $x/b 
    let $fs := $x//f 
    let $es := 
    for $f in $fs   
    order by $f ascending 
    return $f/.. 
return <res>{($b,$es)}</res> 
+0

我发布的xquery工作正常,xpath是问题。 – fxuser

+0

我刚刚编辑了答案,你能否看到这是否有效? –

+0

谢谢你的时间。我的问题是在xpath中,而不是在xquery代码中。 – fxuser