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:作者");