使用dom4j解析XML
2015-05-06 11:37
399 查看
使用dom4j解析XML
概述
dom4j是dom4j.org出品的一个开源XML解析包。Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例如Hibernate,包括sun公司自己的JAXM也用了dom4j。
使用dom4j开发,首先下载dom4j相应的jar文件:
官网下载: http://www.dom4j.org/dom4j-1.6.1/。
dom4j是sourceforge.net上的一个开源项目,因此可以到http://sourceforge.net/projects/dom4j下载其最新版。
dom4j主要的接口
dom4j的API接口 | 说明 |
---|---|
Node | 它是dom4j树中所有节点的根接口 |
Branch | 它代表能包含子节点的节点,Branch接口下有两个子接口:Element和Document |
Element | 它代表XML元素 |
Document | 它代表XML文档根 |
Attribute | 它代表XML元素的属性 |
DocumentType | 它代表XML文档里的DOCTYPE声明 |
ProcessingInstruction | 它代表XML文档里的处理指令 |
CharacterData | 它是所有文本元素的父接口,有CDATA、Text和Comment3个子接口 |
Entity | 定义 XML entity |
CDATA | 它代表XML文档里的CDATA |
Text | 它代表XML文档里的文本内容 |
Comment | 它代表XML文档里的注释内容 |
DOMWriter
SAXWriter
XMLWriter
Writer作用是将dom4j树转换成不同前缀的树或文件。
DocumentFactory:提供一个创建一个Document对象的方法:createDocument();
DocumentHelper:该工具提供了大量静态方法用于创建XML文档各组成部分。
使用dom4j操作xml
在使用dom4j解析xml之前,先将 dom4j-1.6.1.jar 添加到项目中。要使用dom4j解析XML文件,首先需要获取文档的根,即Document。
在dom4j中,获取Document对象的方法有:
创建Document对象
Document document = DocumentHelper.createDocument();
Element root = document.addElement(“students”); // 根元素节点
读取XML文件时,获取Document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File(“student.xml”));
字符串解析为XML时,获取Document对象
String text = “tom“;
Document document = DocumentHelper.parseText(text);
创建XML文档
/** * 创建XML文件 * * @throws IOException */ public void createXml() throws IOException { // 创建Document对象 Document document = DocumentHelper.createDocument(); // 根元素节点 Element root = document.addElement("students"); root.addComment("all students info"); // 添加注释 Element student = root.addElement("student"); // 根元素节点添加子节点 student.addAttribute("id", "001"); // 添加节点属性 Element name = student.addElement("name"); name.addText("tommy"); // 设置节点文本 Element age = student.addElement("age"); age.addText("18"); // 设置XML美化格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); // 编码字符集设置 // xml写入器 XMLWriter writer = new XMLWriter(new FileWriter("students.xml"), format); // 写操作 writer.write(document); writer.flush(); writer.close(); }
结果:
修改XML文档
/** * 修改xml文件 * * @throws Exception */ public void modifyXml() throws Exception { // 创建SAXReader对象 SAXReader reader = new SAXReader(); Document document = reader.read(new File("students.xml")); /** 修改内容之一: 如果student节点中id属性的内容为001,则修改成1001。因为查找节点使用到了Xpath,所以还需要将 jaxen-1.1-beta-6.jar 包添加到项目中 */ List list = document.selectNodes("/students/student/@id"); Iterator it = list.iterator(); while (it.hasNext()) { Attribute attr = (Attribute) it.next(); if ("001".equals(attr.getValue())) attr.setValue("1001"); } /** * 修改内容之二: name项内容若为"tommy",则改为"tom" */ list = document.selectNodes("/students/student/name"); it = list.iterator(); while (it.hasNext()) { Element name = (Element) it.next(); if ("tommy".equals(name.getText())) { name.setText("tom"); } } /** 修改内容之三: 将id="1001"的学生age节点删除,再添加birth节点 */ list = document.selectNodes("/students/student/@id"); it = list.iterator(); while (it.hasNext()) { Attribute attr = (Attribute) it.next(); if ("1001".equals(attr.getValue())) { Element parent = attr.getParent(); Iterator iterator = parent.elementIterator("age"); if (iterator.hasNext()) { Element elem = (Element) iterator.next(); parent.remove(elem); } Element birth = parent.addElement("birth"); birth.setText("1995-01-01"); break; } } /* 将document中的内容写入文件中 */ // 设置XML美化格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); // 编码字符集设置 // xml写入器 XMLWriter writer = new XMLWriter(new FileWriter("students.xml"), format); writer.write(document); writer.close(); }
结果:
遍历XML文档
/** * 遍历节点 * * @throws Exception */ public void readXml() throws Exception { // 创建SAXReader对象 SAXReader reader = new SAXReader(); // 加载xml文件 Document document = reader.read(new File("students.xml")); // 获取根元素节点 Element root = document.getRootElement(); // 递归遍历所有节点内容 read(root); } /** * 读节点信息 * * @param element * student节点 */ private void read(Element element) { for (int i = 0, size = element.nodeCount(); i < size; i++) { Node node = element.node(i); // 获取元素的子节点 if (node instanceof Comment) // 注释节点 continue; if (node instanceof Element) { // 元素节点 Element elem = (Element) node; System.out.print(elem.getName() + " : "); if ("student".equals(node.getName())) { // 是student节点 System.out.println(); Iterator attr = elem.attributes().iterator(); // student节点属性 while (attr.hasNext()) { Attribute at = (Attribute) attr.next(); System.out .println(at.getName() + " : " + at.getValue()); } } read((Element) node); } else if (node instanceof Text) { // 文本节点 if (!"".equals(node.getText().trim())) System.out.println(node.getText()); } } }
结果:
相关文章推荐
- 使用Dom4j解析XML
- Java XML解析工具 dom4j介绍及使用实例
- 使用Dom4j解析XML
- 使用dom4j解析xml标签,将标签属性与文本内容添加进集合
- 使用 dom4j 解析 XML
- 使用dom4j解析XML例子
- 使用 dom4j 解析XML
- Java进阶(二十七)使用Dom4j解析XML文件
- 使用Dom4j解析XML
- java使用dom4j解析xml
- 使用Dom4j解析XML
- 使用 dom4j 解析 XML
- 使用Dom4j进行XML解析
- 使用Dom4j解析XML
- Java——使用DOM4j解析XML文档
- 在java中使用dom4j解析xml(示例代码)
- JAVA 使用Dom4j 解析XML
- 使用DOM4J解析XML文档,以及使用XPath提取XML文档
- 使用DOM4J方式解析XML
- 使用Dom4J解析XML文档