`
laitaogood
  • 浏览: 106322 次
  • 性别: Icon_minigender_1
  • 来自: 豫章郡→紫禁城
社区版块
存档分类
最新评论

在Dom4j中使用xpath

阅读更多
    在使用Dom4j解析xml文档时,我们很希望有一种类似正则表达式的东西来规范查询条件,而xpath正是这样一种很便利的规则吧.
    以下是本人用写的一个类,摘取部分代码;
String xmlName = path + "/" + userName + ".xml";
		// 定义需要返回的第一级菜单的名字集合
		List firstNames = new ArrayList();
		// Attribute的属性集合
		List attrs = new ArrayList();
		// 声明SAXReader
		SAXReader saxReader = new SAXReader();
		try {
			Document doc = saxReader.read(xmlName);
			// 获得所有grade=1的Element的text的值
			String xpath = "/tree/item";
			List list = doc.selectNodes(xpath);
			Iterator it = list.iterator();
			while (it.hasNext()) {
				Element elt = (Element) it.next();
				Attribute attr = elt.attribute("grade");
				System.out.println(attr.getValue());
				if (new Integer(attr.getValue()).intValue() == 1) {
					attr = elt.attribute("text");
					attrs.add(attr.getValue());
					System.out.println(attr.getValue());
				}
			}

		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return attrs;


还有一个是获取某个节点下面里的所有第一级子节点,而不是所有的节点(包括子节点和孙节点).
public static List getSecondMenuNames(String textName, String path,
			String userName) {
		String xmlName = path + "/" + userName + ".xml";
		String name = textName;
		// 定义需要返回的第二级菜单的名字集合
		List firstNames = new ArrayList();
		// Attribute的属性集合
		List attrs = new ArrayList();
		// 声明SAXReader
		SAXReader saxReader = new SAXReader();
		try {
			Document doc = saxReader.read(xmlName);
			// 这个xpath的意思是,获取text='系统管理'的一个Item下的所有Item的节点
			String xpath = "//item[@text='" + name + "']/child::*";

			List list = doc.selectNodes(xpath);
			Iterator it = list.iterator();
			while (it.hasNext()) {
				Element elt = (Element) it.next();

				Attribute attr = elt.attribute("grade");
				System.out.println(attr.getValue());

				attr = elt.attribute("text");
				System.out.println(attr.getValue());
				attrs.add(attr.getValue());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return attrs;
	}


注意看其中的xpath的写法,正是因为有了xpath,我们才能如此简单灵活的对xml进行操作.
刚刚使用xpath的时候可能会报一个错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
这时我们应该往CLASSPATH导入一个jar包,叫jaxen-1.1.1.jar,可从网上下载.

以下附上xpath的部分语法,具体可查看我的BOLG的链接,有一个叫xpath的.呵呵!

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>
表达式 描述
节点名 选择所有该名称的节点集
/ 选择根节点
// 选择当前节点下的所有节点
. 选择当前节点
.. 选择父节点
@ 选择属性
示例
表达式            描述
bookstore 选择所有bookstore子节点
/bookstore 选择根节点bookstore
bookstore/book 在bookstore的子节点中选择所有名为book的节点
//book          选择xml文档中所有名为book的节点
bookstore//book 选择节点bookstore下的所有名为book为节点
//@lang          选择所有名为lang的属性
断言
在方括号中[],用来更进一步定位选择的元素
表达式                      描述
/bookstore/book[1]          选择根元素bookstore的book子元素中的第一个
注意: IE5以上浏览器中第一个元素是0
/bookstore/book[last()] 选择根元素bookstore的book子元素中的最后一个
/bookstore/book[last()-1] 选择根元素bookstore的book子元素中的最后第二个
/bookstore/book[position()<3] 选择根元素bookstore的book子元素中的前两个
//title[@lang]          选择所有拥有属性lang的titile元素
//title[@lang='eng'] 选择所有属性值lang为eng的title元素
/bookstore/book[price>35.00] 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的
/bookstore/book[price>35.00]/title 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素
选择位置的节点
通配符               描述
*             匹配所有元素
@*             匹配所有属性节点
node()             匹配任何类型的节点
示例
表达式               描述
/bookstore/*    选择根元素bookstore的下的所有子元素
//*             选择文档中所有元素
//title[@*]    选择所有拥有属性的title元素

使用操作符“|”组合选择符合多个path的表达式
9
4
分享到:
评论

相关推荐

    dom4j和xpath的jar包

    dom4j和xpath的jar包,解析xml的最佳拍档.

    DOM4J_xpath

    详细介绍dom4j_xpath,相信对想学dom4j_xpath的朋友有帮助

    在dom4j中使用XPath的简单实例

    下面小编就为大家带来一篇在dom4j中使用XPath的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    dom4j中XPath用法

    NULL 博文链接:https://wangweiwei358.iteye.com/blog/764548

    dom4j 和xpath

    dom4j 和dom4j 是一款比较好用的Xml解析工具jar,其中部分功能需要xpath的支持

    xml+dom4j+xpath资料

    xml+dom4j+xpath资料

    dom4j基础入门文档(SAX,DOM,XPATH)

    dom4j基础入门文档,与 W3C DOM API 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。

    dom4j及xpath jar包

    Dom4j 解析XML 所使用的jar包,及添加XPath 支持所需要的 jar 包。具体使用可看我博客

    Dom4j__XPath

    讲解Dom4j如何利用XPath解析XML

    dom4j用到的xpath\dom4j等一系列jar包

    资料来自javaweb学习所得

    dom4j和xpath必备jar包

    dom4j和xpath必备jar包对xml文档进行解析的必须jar包!

    dom4j用到的jar包 xpath用到的jar包

    使用dom4j解析xml时用到的jar包dom4j-1.6.1.zip xpath用到的jar包jaxen-1.1-beta-6.jar

    dom4j中xpath的使用

    NULL 博文链接:https://a52071453.iteye.com/blog/1708711

    使用dom4j解析XML

    本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器修改。与W3C DOM API相比,使用dom4j所包含的...

    用dom4j解析xml时,用xpath的辅助包

    用dom4j解析xml时,经常需要用到xpath,由于dom4j-1.6.1.jar不包括jaxen-1.1-beta-6.jar,导致使用xpath报错。 其中jaxen-full.jar是为了解决ava.lang.NoClassDefFoundError: org/jaxen/JaxenException错误。 下载的...

    Dom4j_使用简介

    Dom4j_使用简介DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java ...

    dom4j集成Xpath写法

    http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html 的doc文档。

    dom4j和xpath帮助文档

    dom4j帮助文档,以及xpath的参考文档,菜鸟必备工具。

    Dom4j 1.6.1 JAVA API

    dom4j帮助文档 官方API All Classes Packages org.dom4j org.dom4j.bean org.dom4j.datatype org.dom4j.dom org.dom4j.dtd org.dom4j.io org.dom4j.jaxb ...org.dom4j.xpath org.dom4j.xpp

Global site tag (gtag.js) - Google Analytics