所需jar包:
dom4j.jar
jaxen.jar
xml测试页面:
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore desc="book set"> book1 <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> book2 <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> book3 <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> book4 <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> book5 <book category="JSP"> <title lang="hx">Learning JSP</title> <author>Erik T. Ray</author> <year>2006</year> <price>22</price> </book> </bookstore>
java测试代码:
SAXReader reader = new SAXReader();
InputStream inputStream = BooksXml.class.getClassLoader().getResourceAsStream("books.xml");
Document doc = reader.read(inputStream);
//可以先创建xpath表达式
XPath xPath = doc.createXPath("/bookstore/book");
List<?> list;
//也可以直接使用
list = doc.selectNodes("/bookstore/book");//获取bookstore下面的所有book元素的集合
list = xPath.selectNodes(doc.getRootElement());//在指定的节点下面找寻满足条件的集合
list = doc.selectNodes("/bookstore/book/author/text()");//获取作者名字集合
list = doc.selectNodes("/bookstore/book[price>35]/price");//获取价格大于35的书的价格集合
list = doc.selectNodes("/bookstore/book[price>35]/title");//获取价格大于35的书的标题集合
list = doc.selectNodes("/bookstore/book[1]");//获取第一本书
list = doc.selectNodes("/bookstore/book[last()]");//获取最后一本书
list = doc.selectNodes("//title[@lang]");//获取书标题中有lang属性的标题集合
list = doc.selectNodes("//title[@lang='en']");//获取属性lang值等于en的标题集合
list = doc.selectNodes("/bookstore/book/title | //price");//获取书的标题集合和价格集合
list = doc.selectNodes("/bookstore/book[position()<3]");//获取前两本书
list = doc.selectNodes("/bookstore/book/title");//获取所有的title集合
list = doc.selectNodes("/bookstore/book/title[@*]");//获取含有属性的title集合
Element root = doc.getRootElement();
list = root.selectNodes("child::book");//当前节点下面的所有book集合
list = root.selectNodes("child::*");//当前节点下面的所有子元素集合
list = root.selectNodes("child::node()");//获取当前节点下面的所有子元素集合
list = root.selectNodes("attribute::desc");//获取当前节点的desc属性
list = root.selectNodes("attribute::*");//获取当前节点的所有属性集合
list = root.selectNodes("child::text()");//获取当前节点的所有文本子节点集合
list = root.selectNodes("descendant::book");//获取root的后代元素book集合
list = doc.selectSingleNode("/bookstore/book[@category='JSP']")
.selectNodes("descendant::title");//获取到具体的书后在获取title元素
list = doc.selectSingleNode("/bookstore/book[@category='JSP']")
.selectNodes("ancestor-or-self::book");
list = root.selectNodes("child::*/child::price");//选取当前节点的所有 price 孙子集合