1. 程式人生 > >XPath獲取帶名稱空間的XML

XPath獲取帶名稱空間的XML

XML檔案如下:

<?xml version="1.0" encoding="UTF-8"?> <書架 xmlns="http://www.guotest01.in/01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.guotest01.in/01 test05.xsd">     <書 出版社="出版社01">     <書名>書名01</書名>       <作者>作者1</作者>       <售價>1</售價>       <簡介>簡介1</簡介>   </書>     <書 出版社="出版社02">     <書名>書名02</書名>       <作者>作者2</作者>       <售價>2</售價>       <簡介>簡介2</簡介>   </書>     <書 出版社="出版社03">     <書名>書名03</書名>       <作者>作者3</作者>       <售價>3</售價>       <簡介>簡介3</簡介>   </書>     <書 出版社="出版社04">     <書名>書名04</書名>       <作者>作者4</作者>       <售價>4</售價>       <簡介>簡介4</簡介>   </書> </書架>

需求:取得第二本書節點下的作者節點的文字內容即:/書架/書[2]/作者,我用的JDK1.8

用如下的java程式碼無法解析帶有名稱空間的XML,原因就不多說了,百度上有很多,我這裡就只說我的一種解決辦法。

       String path = "WebContent/testXml/book2.xml";        SAXReader reader = new SAXReader();        Document document=reader.read(path);        Node author = document.selectSingleNode("/書架/書[2]/作者");        System.out.println(author.getText());

我的解決辦法就是設定名稱空間並且XPath語句查詢的時候節點前面帶上名稱空間的名稱。

        Map map = new HashMap();           map.put("xmlns","http://www.guotest01.in/01");           SAXReader saxReader = new SAXReader();           File file = new File("WebContent/testXml/test4.xml");           saxReader.getDocumentFactory().setXPathNamespaceURIs(map);           Document document = saxReader.read(file);           List<Element> tmp = document.selectNodes("//xmlns:書架/xmlns:書[1]/xmlns:作者");

        System.out.println(tmp.size());         System.out.println(tmp.get(0).getText());