dom4j-xpath的使用

所需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 孙子集合

 

你可能感兴趣的:(jsp,xml,Web,J#)