XML.04-dom4j和XPath

body,td { font-family: calibri; font-size: 10pt }

  • XML.04-dom4j和XPath

    • dom4j的基本使用
    • XPath
      • 啥是XPath
      • XPath语法
        • 路径表达式
        • 谓语
        • 通配符
        • 选取若干路径
    • Dom4j对XPATH的支持
  • 下载对应的jar包,导入到对应的工程中
  • 对于对于的web项目,复制dom4j-1.6.1.jar到 WebRoot – WEB-INF – lib里面
  • 对于java项目:新建source folder–>复制jar包–>右键–>build path–>add to build path

dom4j的基本使用

基本的解析

1.    public Document parseDoc(String filePath) throws DocumentException {2.        return  new SAXReader().read(filePath);3.    }

读取一个元素

1.    public void getElement() throws DocumentException{2.3.        Document document = parseDoc(path);4.        Element root = document.getRootElement();5.        List<Element> books = root.elements("书");6.        Element book2 = books.get(1);7.        Element author2 = book2.element("作者");8.        System.out.println(author2.getText());9.10.    }

在元素末尾添加子元素

1.    public void addElement() throws Exception{2.        Document document= parseDoc(path);3.        Element root = document.getRootElement();4.        Element book2 = (Element)root.elements("书").get(1);5.        book2.addElement("cat").setText("I am a cat");6.        writeBack(document, path);7.    }

在任意位置添加子元素

1.    public void insertElement() throws Exception{2.        Document document = parseDoc(path);3.        Element root = document.getRootElement();4.        Element book2 = (Element)root.elements("书").get(1);5.        List<Element> list = book2.elements();6.        Element cat = DocumentHelper.createElement("cat2");7.        cat.setText("I am a cat too");8.        list.add(1, cat);9.        writeBack(document, path);10.    }

在任意位置添加,这回真的是任意位置了…dom4j并没有提供insertBefore这种方法,但是我们通过elements()方法拿到的一个list真的是个list…所以可以直接add进去.

删除一个元素

1.    public void removeElement() throws Exception{2.        Document document = parseDoc(path);3.        Element root = document.getRootElement();4.        Element book2 = (Element)root.elements("书").get(1);5.        //Element cat = root.element("cat2");6.        Element cat = book2.element("cat2");7.        book2.remove(cat);8.        writeBack(document, path);9.10.    }

elements()方法,只是查找当前元素的下一级的子元素,注意注释那一行,刚开始写错了,而且神奇的是这玩意儿没找到也不报错…

修改一个元素

1.public void changeElement() throws Exception{2.        Document document = parseDoc(path);3.        Element root = document.getRootElement();4.        Element book2 = (Element)root.elements("书").get(1);5.        Element author2 = book2.element("作者");6.7.        author2.setText("西川结衣");8.        writeBack(document, path);9.    }

回写

1.    public void writeBack(Document document,String filePath) throws Exception{2.        OutputFormat format = OutputFormat.createPrettyPrint();3.        format.setEncoding("UTF-8");4.        XMLWriter writer = new XMLWriter(new FileOutputStream(filePath), format);5.        writer.write(document);6.        writer.close();7.    }

XPath

啥是XPath

XPATH是在XML中查找信息的一种语言,通过它可以很方便快捷精确的找到一个元素.

  • 使用路径表达式在XML文档中导航
  • 包含一个标准函数库
  • 是W3C的标准
  • 是XSLT的主要元素(这是什么玩意儿,实在不想查了)

XPath语法

XPath中有七种节点: 元素,属性,文本,命名空间,处理指令,注释以及文档(根节点)

XML文档是被当作一个树对待的,文档节点也就是所谓的根节点. 其他的叫法都遵循树的原则.

路径表达式

表达式 描述
nodeName 选取此节点的所有子节点
/ 从根节点开始匹配
// 从匹配选择的当前节点选择,不考虑位置
. 当前节点
.. 当前节点的父节点
@ 属性

比如

  • bookstore 选取bookstore元素所有的子节点
  • /bookestore 选取根元素bookstore
  • bookst/book 选取属于bookstore的子元素的所有book元素
  • //book 选取所有book子元素,不管在什么位置
  • bookstore//book 选取属于bookstore的后代的所有book元素. 不管它位于bookstore下的什么位置
  • //@lang 选取名为lang的所有属性
  • /AAA/BBB 从根节点开始获取BBB元素
  • //BBB 忽略层级关系,获取所有BBB元素
  • //BBB/DDD 找所有BBB下的DDD元素

谓语

用来查找特定条件的节点,写在方括号里

比如:

  • /bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
  • /bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
  • /bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
  • /bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
  • //title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
  • //title[@lang=’eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
  • /bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
  • /bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
  • /AAA/BBB[1] 找AAA下的第一个BBB
  • /AAA/BBB[last()] 最后一个

通配符

  • /AAA/BBB/CCC/* 考虑层级关系找/AAA/BBB/CCC/下的所有元素
  • //* XML中的所有元素
  • //@id 选择所有

选取若干路径

可以使用| 来选取若干路径,比如

  • //book/title | //book/price

再复杂的就去看W3school吧…

Dom4j对XPATH的支持

dom4j是支持XPath的,需要导入jaxen包

仅可以使用的两个方法:

  • selectNodes()
  • selectSingleNode()

不多做解释.

时间: 2024-10-01 03:09:03

XML.04-dom4j和XPath的相关文章

XML系列:(8)XML解析-Dom4j的xPath技术

1.xPath技术 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xPath作用:主要是用于快速获取所需的节点对象. 1.1.在dom4j中如何使用xPath技术 1)导入xPath支持jar包 .  jaxen-1.1-beta-6.jar(这个jar包在dom4j的压缩包中,位置:dom4j-1.6.1\lib\jaxen-1.1-beta-6.jar) 2)使用xpath方法 List selectNodes("xpath表达式");  

Java xml 操作(Dom4J修改xml &#160;&#160;+ xPath技术 &#160;+ SAX解析 + XML约束)

1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签. 属性: 可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单 双混用. 文档声明: <?xml version="1.0" encoding="utf-8"?> encoding="utf-8&q

Dom4J配合XPath解析schema约束的xml配置文件问题

如果一个xml文件没有引入约束,或者引入的是DTD约束时,那么使用dom4j和xpath是可以正常解析的,不引入约束的情况本文不再展示. 引入DTD约束的情况 mybook.dtd: <?xml version="1.0" encoding="UTF-8" ?> <!ELEMENT books (book+)> <!ELEMENT book (name|author|price)+> <!ELEMENT name (#PCD

Java操作XML文件 dom4j 篇

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; //工具包 import java.util.Iterator; import java.util.List; //dom4j包 import org.dom

带命名空间的XML的dom4j应用&lt;转&gt;

Element root = document.getRootElement();     List   recordenvlist = document.selectNodes("//gml:envelope");     //gml:envelope 提示 NoClassDefFoundError org.dom4j.DocumentFactory.createXPath 原因:dom4j的xpath api依赖jaxen完成解决方法:在系统中加入jaxen.jar.jaxen.j

xml之dom4j解析

* 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要怎么做 - 导入dom4j提供jar包 - 常见一个文件夹lib - 复制jar包到lib下面 - 邮件点击jar包.builb path -- add to bulildpath - 看到jar包变成奶瓶装 表示导入成功 * 得到document使用 * SAXReader reader = ne

Java---XML的解析(2)-DOM4J解析/Xpath

Dom4j: Dom SUN dom在加载时,将所有元素全部加载内存 DOM4j - 第三方. Dom4j是一个开源.灵活的XML API. 目前很多开源框架如struts,hibernate都使用dom4j做为解析其xml的工具. 支持文档的读写功能和Xpath快速查询操作. 这个需要我们自己把它的包导入myeclipse中的. 准备DOM4j: 包:dom4j.x.jar 包结构: org.dom4j 类 org.dom4j.io.SAXReader – xml文档解析器 org.dom4j

xml解析-dom4j(比较流行,第三方提供)

需要导入dom4j的包,以提供dom4j的支持. package day06_parser.dom4j; /**dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的 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 J

xml(3)--dom4j实现crud操作

1.XML解析技术概述 (1)XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种标准方式. sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它. (2)XML解析器(软件/实现类) Crimson(SUN).Xerces(IBM->APACHE) .Aelfred2(DOM4J开源组织) (3)XML解析技术

xml&amp;dom_sax&amp;dom4j的常见操作

<? xml version =”1.0” encoding=”GB2312”?> <!-- 学生信息—><?xml-stylesheet type=”text/css” href=”book.css”><student><person id=”001” ><name> 张三 </name><age> 28 </age><address> 北京 </address><p