java使用xquery

來源:互聯網
上載者:User

在使用關聯式資料庫時,我們通過sql語句來檢索資料來源,這沒有任何問題,但是關係資料也存在著一定的局限性,只能儲存結構化的資料
當資料集是非結構化的時候該怎樣儲存呢,最簡單的辦法就是封裝成xml。
應用開發中我們經常使用xml作為資料來源來儲存一些非結構化的資料,然而是否存在一種語言可以像sql語句檢索關聯式資料庫一樣來檢索xml呢?答案就是xquery。

xquery本身的文法結構並不複雜,xml節點位置是通過xpath進行描述的,在輔以相應的邏輯運算式,滿足使用者的檢索喜好設定。
有關xquery和xpath的教程可參考如下網址
http://www.w3school.com.cn/xpath/index.asp
http://www.w3school.com.cn/xquery/index.asp
幾個比較基礎的文法資訊如下:
xpath中通過'/'來表示節點層級結構,'//'表示所有節點
節點過濾條件寫在'[ ]'裡
節點屬性加@符
如//person[@name='zhangsan']/password 表示擷取姓名為zhangsan的使用者密碼
對應的xml結構是這樣的<root><person name="zhangsan"><password>mima</password></person> person...</root>

xquery中
where語句用來指定過濾條件
return語句用來設定返回的結果集
for語句用來執行遍曆
where和return子句裡都可以加if/else條件判斷邏輯
幾個比較常用的功能函數:
    data(element):返回節點的text
    contains(element,value):查詢模糊比對
    doc(filePath):載入xml資料檔案
如:
for $x in doc("persons.xml")//person
where $x/@age > 20 and contains($x/@name,'張')
return if($x/@sex='男') then data($x/password) else ()
表示:
查詢姓張並且年齡大於20的人,如果是男性返回密碼,如果是女性返回空

javaAPI使用
這裡主要使用saxon來執行xquery,具體應用可參考如下網址:
http://www.cs.duke.edu/courses/fall08/cps116/docs/saxon/samples/java/XQJExamples.java
saxon的jar包可到這裡下載:
http://download.csdn.net/detail/javaman_chen/5107221
使用大致如下:

//首先擷取xml的資料來源串連XQDataSource ds = new SaxonXQDataSource();XQConnection conn = ds.getConnection();//通過XQExpression執行xqueryXQExpression expression = conn.createExpression();XQResultSequence res=expression.executeQuery("doc(persons.xml)//person....");//處理結果集while(res.next()){    res.getObject();}

另外:
xquery的doc()函數需要傳遞xml的文檔路徑,然而在開發時,我們的xml資料來源可能還沒有組建檔案,對此,XQExpression提供了API,可以直接綁定xml資料而不用載入xml文檔
expression.bindNode(XQConstants.CONTEXT_ITEM, org.w3c.dom.Document doc, null);
doc對象可通過DocumentBuilder類產生
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc=db.parse(new ByteArrayInputStream("<person>zhangsan</person>".getBytes()));

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.