2011-04-03 21 views
1

使用Java API評估Berkeley DB。以下是我的測試XML數據之一:Oracle - Berkeley DB XML Java API - 通過XML查詢獲取多個級別的屬性值

<master> 
    <env name="development"> 
     <server name="tomcat1" ip="122.122.123.1"> 
      <domain name="domain1"> 
       <application name="GreatApplication1" status="enabled"/> 
      </domain> 
      <domain name="domain2"> 
       <application name="GreatApplication2" status="enabled"/> 
       <application name="NotSoGreatApplication2" status="disabled"/> 
       <application name="GreatApplication3" status="enabled"/> 
      </domain> 
     </server> 
    </env> 
</master> 

有了下面的查詢字符串,我可以查詢應用程序以及它們對任何「域」的任何「服務器」狀態:(假設envs.dbxml是我的XML DB)

collection('envs.dbxml')/master/env[@name=$name]/server/domain/application/@*/string()

我希望能夠得到各服務器名稱此查詢時返回結果。這怎麼能實現?這個查詢將一個接一個地返回所有的應用程序和狀態值。

+0

好問題,+1。查看我的答案,獲取完整的簡短XPath 2.0表達式 - 解決方案。 :) – 2011-04-03 15:58:36

回答

2

使用

(
    /master/env[@name=$name]/server/@name 
| 
    /master/env[@name=$name]/server/domain/application/@* 
) 
    /string(.) 

或者,這種較短的形式

/master/env[@name=$name]/server/(@name|domain/application/@*)/string(.) 

說明:在這裏我們使用XPath |(工會)運算符和XPath 2.0中語法允許表達種類:expr/(expr)及其表達方式expr/func(argList)

+0

感謝精確,令人敬畏的快速答案。 – 2011-04-03 17:35:34

+0

@戒指:不客氣。 – 2011-04-03 17:36:40

+0

+1好答案。 – 2011-04-03 23:14:19