2015-12-01 112 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