org.jdom2.xpath.XPath類居然標(biāo)注過時,無奈之下只能研究api。
發(fā)現(xiàn)Use XPathFactory/XPathExpression/XPathBuilder instead.
也就是說jdom應(yīng)該是將xpath類的功能進(jìn)行了更加詳細(xì)的分類。
根據(jù)經(jīng)驗進(jìn)行了一些類的測試,最后得出了讀取xml的兩種方式。
第一種方式,通過XPathFactory類讀取xml
xml文件的內(nèi)容如下
- <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>
通過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類的對象,需要引入jaxen的jar包,我們使用JaxenXPathFactory類來生成XPathFactory
- XPathFactory factory = JaxenXPathFactory.instance();
生產(chǎn)xpath表達(dá)式實例對象,并獲取結(jié)果集
- 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();
第二種方式,通過XPathBuilder獲取xpath表達(dá)式的實例對象集合首先來創(chuàng)建一個filter,org.jdom2.filter.Filters中提供給我們了一些過濾器,我們這里選擇元素類型的,F(xiàn)ilter接口的全名是org.jdom2.filter.Filter
- Filter<Element> filter = Filters.element();
生成XPathBuilder對象
- XPathBuilder<Element> builder = new XPathBuilder<Element>("http://homepages", filter);
根據(jù)它的compileWith(XPathFactory factory)方法來獲取到我們需要的xpath表達(dá)式的實例對象集合
- 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文件內(nèi)容
使用XPathBuilder的setNamespace方法聲明命名空間,Xpath表達(dá)式不需要再寫"http://",例如
- XPathBuilder<Element> builder = new XPathBuilder<Element>("ci:Teacher", filter);
-
- builder.setNamespace("ci", "http://www.test.cn/tuple");
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。