org.jdom2.xpath.XPath類(lèi)居然標注過(guò)時(shí),無(wú)奈之下只能研究api。
發(fā)現Use XPathFactory/XPathExpression/XPathBuilder instead.
也就是說(shuō)jdom應該是將xpath類(lèi)的功能進(jìn)行了更加詳細的分類(lèi)。
根據經(jīng)驗進(jìn)行了一些類(lèi)的測試,最后得出了讀取xml的兩種方式。
第一種方式,通過(guò)XPathFactory類(lèi)讀取xml
xml文件的內容如下
- <span style="font-size:14px"><?xml version="1.0"?>
- <?xml-stylesheet type="text/xsl" href="test.xsl"?>
- <homepages xmlns:xlink="http://www.w3.org/1999/xlink">
-
- <homepage xlink:type="simple"
- xlink:>Visit W3C</homepage>
-
- </homepages></span>
通過(guò)SAXBuilder獲取document和root
- String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";
-
- SAXBuilder saxBuilder = new SAXBuilder();
-
- Document document = saxBuilder.build(path);
-
- Element root = document.getRootElement();
建立
XPathFactory類(lèi)的對象,需要引入jaxen的jar包,我們使用JaxenXPathFactory類(lèi)來(lái)生成XPathFactory
- XPathFactory factory = JaxenXPathFactory.instance();
生產(chǎn)xpath表達式實(shí)例對象,并獲取結果集
- XPathExpression<Object> objs = factory.compile("http://homepages");
-
- List<Object> objList = objs.diagnose(root, false).getResult();
完整代碼是
- String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";
-
- SAXBuilder saxBuilder = new SAXBuilder();
-
- Document document = saxBuilder.build(path);
-
- Element root = document.getRootElement();
-
- XPathFactory factory = JaxenXPathFactory.instance();
-
- XPathExpression<Object> objs = factory.compile("http://homepages");
-
- List<Object> objList = objs.diagnose(root, false).getResult();
第二種方式,通過(guò)XPathBuilder獲取xpath表達式的實(shí)例對象集合首先來(lái)創(chuàng )建一個(gè)filter,org.jdom2.filter.Filters中提供給我們了一些過(guò)濾器,我們這里選擇元素類(lèi)型的,Filter接口的全名是org.jdom2.filter.Filter
- Filter<Element> filter = Filters.element();
生成XPathBuilder對象
- XPathBuilder<Element> builder = new XPathBuilder<Element>("http://homepages", filter);
根據它的compileWith(XPathFactory factory)方法來(lái)獲取到我們需要的xpath表達式的實(shí)例對象集合
- XPathFactory factory = JaxenXPathFactory.instance();
-
- XPathExpression<Element> objs = builder.compileWith(factory);
之后的方式就和方法1一樣了。完整代碼是
- String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";
-
- SAXBuilder saxBuilder = new SAXBuilder();
-
- Document document = saxBuilder.build(path);
-
- Element root = document.getRootElement();
-
- Filter<Element> filter = Filters.element();
-
- XPathBuilder<Element> builder = new XPathBuilder<Element>("http://homepages", filter);
-
- XPathFactory factory = JaxenXPathFactory.instance();
-
- XPathExpression<Element> objs = builder.compileWith(factory);
-
- List<Element> objList = objs.diagnose(root, false).getResult();
獲取帶有命名空間的xml文件內容
使用XPathBuilder的setNamespace方法聲明命名空間,Xpath表達式不需要再寫(xiě)"http://",例如
- XPathBuilder<Element> builder = new XPathBuilder<Element>("ci:Teacher", filter);
-
- builder.setNamespace("ci", "http://www.test.cn/tuple");
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。