`
ssuhvs
  • 浏览: 8709 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

在Dom4j中使用xpath

阅读更多
在Dom4j中使用xpath
在使用Dom4j解析xml文档时,我们很希望有一种类似正则表达式的东西来规范查询条件,而xpath正是这样一种很便利的规则吧.
以下是本人用写的一个类,摘取部分代码;
Java代码
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; 


还有一个是获取某个节点下面里的所有第一级子节点,而不是所有的节点(包括子节点和孙节点).
Java代码
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的表达式
分享到:
评论

相关推荐

    dom4j中XPath用法

    这篇博文将深入探讨如何在DOM4J中使用XPath进行数据查找和操作。 首先,我们需要理解DOM4J中XPath的基本概念。XPath表达式是由路径、轴、节点测试和节点组合组成的字符串,用于定位XML文档中的特定节点。例如,`/...

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

    DOM4J库集成了XPath支持,使得在DOM4J中使用XPath查询XML数据变得非常方便。 DOM4J的主要特性包括: 1. **XML解析**:DOM4J提供了多种解析方式,包括DOM、SAX和StAX,以适应不同的性能和内存需求。 2. **文档模型**...

    dom4j和xpath的jar包

    DOM4J和XPath是两种在Java编程环境中广泛用于XML处理的重要工具。XML(eXtensible Markup Language)是一种用于标记数据的语言,常用于结构化数据的存储和交换。DOM4J是一个灵活且功能丰富的Java库,它提供了强大的...

    DOM4J_xpath

    DOM4J的最大特点是使用了大量的接口,并且这些接口均定义在`org.dom4j`包下。下面列举了一些关键接口及其功能: 1. **Attribute**: 定义XML中的属性。 2. **Branch**: 表示能够包含子节点的节点,例如XML元素...

    在dom4j中使用XPath的简单实例

    以下将详细讲解如何在DOM4J中使用XPath。 首先,我们需要导入必要的DOM4J库和JAXB库,因为SAXReader类用于读取XML文件,它属于DOM4J的一部分: ```java import org.dom4j.Document; import org.dom4j....

    dom4j中xpath的使用

    **DOM4J中XPath的使用** XPath是一种在XML文档中查找信息的语言,它被设计用来在XML文档中导航,寻找节点、属性或者信息。DOM4J是Java中一个非常流行的XML处理库,它提供了对XPath的强大支持。这篇文档将深入探讨...

    dom4j 和xpath

    DOM4J和XPath是XML处理领域中的两个重要概念,它们在Java编程中有着广泛的应用。DOM4J是一款灵活且功能强大的...在Java项目中,使用DOM4J配合XPath可以极大地提高开发效率和代码的可读性,尤其在处理复杂XML文档时。

    dom4j及xpath jar包

    要使用DOM4J和XPath,首先需要在项目中引入相应的jar包。提供的压缩包中包含的"dom4j"文件,很可能就是DOM4J库的jar包。通常,还需要一个支持XPath的jar包,如jaxen,它为DOM4J提供了XPath的支持。如果你的描述中...

    dom4j和xpath必备jar包

    在Java开发中,DOM4J和XPath是两个重要的XML处理工具。XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、配置文件和文档结构化存储。DOM4J和XPath则提供了方便的方式来解析、操作和检索XML文档...

    DOM4J jar包和W3CSchool.chm的文档包含XPath的教程

    Jaxen使XPath查询在不同的XML解析器之间具有可移植性,因此即使在DOM4J中使用XPath,也可以通过Jaxen调用其他解析器的实现。 "W3CSchool.chm"文档是一个经典的在线编程学习资源,其中的XPath教程可能包含了XPath的...

    xml+dom4j+xpath资料

    DOM4J与XPath的结合使用,大大简化了XML处理的复杂度,提高了开发效率。在实际项目中,它们是处理XML数据不可或缺的工具。通过深入学习和实践,开发者可以更好地掌握XML的解析、操作和查询技术,提升项目中的数据...

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

    16. `org.dom4j.XPath`: 提供XPath表达式的解析和评估,用于快速定位XML文档中的节点。 二、读取和解析XML文档 dom4j提供了两种主要的XML解析方式:DOMReader和SAXReader。DOMReader基于W3C DOM,将整个XML文档...

    dom4j和xpath帮助文档

    XPath使用路径表达式来选取节点,这些表达式类似于我们在文件系统中使用的路径,但更为强大和灵活。 **DOM4J的主要功能** 1. **解析XML**:DOM4J可以使用DOM、SAX或StAX解析器加载XML文档,提供多种解析方式以适应...

    Dom4j结合XPath解析XML文件路径表达式

    总结来说,理解XPath的路径表达式以及如何在Dom4j中使用它们是处理XML文档的关键技能。掌握这两种路径类型,不仅可以精确地定位XML文档中的数据,还能提高代码的可读性和可维护性。在实际开发中,根据需求选择合适的...

    dom4j_xpath_junitTest.zip

    在JUnit测试中,我们可以使用DOM4J来读取、解析XML文件,然后通过XPath选取特定内容,验证其是否符合预期。例如,一个简单的测试用例可能如下所示: ```java import org.junit.Test; import static org.junit....

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...

    使用Maven管理项目,实现DOM4j操作XML文件

    在本示例中,"sendXmlPersist"可能是演示程序的主类或测试用例,它展示了如何使用DOM4j和Maven配合工作。具体步骤可能包括以下几步: 1. **引入DOM4j依赖**:在`pom.xml`文件中,添加DOM4j的依赖项,这样Maven会在...

    DOM4J 的使用

    DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义。 一、DOM4J 简介 DOM4J 是一个基于 Java 的 XML 解析包,用于解析和操作 XML 文档。它提供了一个简洁的 API,方便用户快速地解析和操作 ...

    dom4j_dom4j1.6.1安装包_

    总之,DOM4J 1.6.1是一个功能强大且广泛使用的XML处理库,它的Maven集成使得在Java项目中使用变得方便。无论是创建XML文档、查询XML结构还是进行XML数据操作,DOM4J都能提供简洁、高效的API。在安装和使用过程中,...

Global site tag (gtag.js) - Google Analytics