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

  • 下载对应的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()

不多做解释.

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

  1. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  2. 简单用DOM4J结合XPATH解析XML

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式    第一种形式   ...

  3. java使用dom4j和XPath解析XML与.net 操作XML小结

    最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...

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

    如果一个xml文件没有引入约束,或者引入的是DTD约束时,那么使用dom4j和xpath是可以正常解析的,不引入约束的情况本文不再展示. 引入DTD约束的情况 mybook.dtd: <?xml ...

  5. Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)

    1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...

  6. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  7. dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程

    *1 dom4j解析器   1)CRUD的含义:CreateReadUpdateDelete增删查改   2)XML解析器有二类,分别是DOM和SAX(simple Api for xml).     ...

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

    Dom4j: Dom SUN dom在加载时,将所有元素全部加载内存 DOM4j - 第三方. Dom4j是一个开源.灵活的XML API. 目前很多开源框架如struts,hibernate都使用d ...

  9. java的XML解析(DOM4J技术)

    DOM4J技术解析XML文件 一,XML简介 xml (可扩展标记语言)  全称: Extended Markup Language 可扩展的含义:允许程序员按照自己的想法去扩展新的标签 注意:但是扩 ...

  10. 带命名空间的XML的dom4j应用<转>

    Element root = document.getRootElement();     List   recordenvlist = document.selectNodes("//gm ...

随机推荐

  1. MVC学习笔记-01

    什么是MVC MVC是指(Model-View-Controll即模型-视图-控制器)用于表示表示一种软件架构模式,它把软件分成三个基本的部分:模型(Model),视图(view),控制器(Contr ...

  2. DE2-115开发板学习(1_时钟信号引脚分配与复位信号的产生)

    1.DE2-115开发板资源 Altera EPCS64 Configuration Device 64MB SDRAM (两片) 50MHz Oscillator EP4CE115F29C7(4PL ...

  3. spread 程序调试时,未激活的提示解决

    场景:程序调试运行,打开含spread组件的窗体时如下: 解决: 将spread组件拖到某一个窗体后,会在properties中出现license文件.再运行,OK! 注意: license文件一定是 ...

  4. 打造H5里的“3D全景漫游”秘籍

    近来风生水起的VR虚拟现实技术,抽空想起年初完成的“星球计划”项目,总结篇文章与各位分享一下制作基于Html5的3D全景漫游秘籍. QQ物联与深圳市天文台合作,在手Q“发现新设备”-“公共设备”里,连 ...

  5. [MySQL] 高可用架构MMM简单介绍

    一.来源及原理: 众所周知,MySQL自身提供了AB复制(主从复制),然后可以很轻松实现master-master双向复制,同时再为其中一个Master节点搭建一个Slave库. 这样就实现了MySQ ...

  6. char、varchar、text和nchar、nvarchar、ntext的区别

    1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的 ...

  7. java关于值传递和引用传递的有趣试验

    上代码: public class Demo { public static void main(String[] args) { test_1(); test_2(); } public stati ...

  8. android .apk安装时遇到NSTALL_FAILED_CONTAINER_ERROR错误

    在一台酷派上装apk时遇到问题: android Installation error: INSTALL_FAILED_CONTAINER_ERROR 遇到问题后baidu google修改为andr ...

  9. DispatcherServlet作用

    DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好 ...

  10. Hive删除数据库

    DROP DATABASE是删除所有的表并删除数据库的语句.它的语法如下: DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] data ...