使用Dom4j解析XML文档
来源:互联网 发布:最受欢迎的网络歌手 编辑:程序博客网 时间:2024/05/22 04:47
使用Dom4j解析XML文档
--尚晓鹏
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
下面我们一起来分析一下使用Dom4j对于XML文档的CRUD操作。
Dom4j的主要接口(org.dom4j)
Attribute
Attribute定义了XML的属性
Branch
Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
CDATA
CDATA 定义了XML CDATA 区域
CharacterData
CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text
Comment
Comment 定义了XML注释的行为
Document
定义了XML文档
DocumentType
DocumentType 定义XML DOCTYPE声明
Element
Element定义XML 元素
ElementHandler
ElementHandler定义了 Element 对象的处理器
ElementPath
被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity
Entity定义 XML entity
Node
Node为所有的dom4j中XML节点定义了多态行为
NodeFilter
NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction
ProcessingInstruction 定义 XML 处理指令
Text
Text 定义XML 文本节点
Visitor
Visitor 用于实现Visitor模式
XPath
XPath 在分析一个字符串后会提供一个XPath 表达式
一、 读取并解析XML文档
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class Dom4jDeom {
@Test
public void test1() throws Exception {
SAXReader reader = new SAXReader(); //创建阅读器
Document document = reader.read(new File("src//code1.xml")) //加载XML文档
Element root = document.getRootElement(); //获取根元素
display(root);
}
private void display(Element root) {
// TODO Auto-generated method stub
displayAttr(root); //获取属性
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) { //迭代输出
Element ele = i.next();
if (ele.isTextOnly()) {
displayAttr(ele);
System.out.println(ele.getText());
} else {
display(ele); //递归调用
}
}
}
@SuppressWarnings("unchecked")
private void displayAttr(Element root) {
// TODO Auto-generated method stub
for (Iterator<Attribute> j = root.attributeIterator(); j.hasNext();) {
Attribute attr = j.next();
System.out.println(attr.getName() + " " + attr.getValue());
}
}
}
code1.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book*)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST author address CDATA #IMPLIED>
]>
<books>
<book>
<name>Java开发</name>
<author>佚名1</author>
<price>10.00</price>
</book>
<book>
<name>Java讲义</name>
<author>佚名2</author>
<price>11.00</price>
</book>
<book>
<name>Java Web</name>
<author address="保定-河软">佚名3</author>
<price>12.00</price>
</book>
<book>
<name>Java 基础</name>
<author address="保定-河软">佚名4</author>
<price>15.00</price>
</book>
</books>
二、 使用Dom4j向XML文档中写入内容
1、使用Dom4j直接创建一个新的XML文档
public void test2() throws Exception {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("中国");
Element newchild = root.addElement("省份");
Element child = newchild.addElement("陕西省");
child.setText("交通大学");
child = newchild.addElement("河北省");
child.setText("河北软件");
child.addAttribute("dept", "软件系");
child = newchild.addElement("北京市");
child.setText("Microsoft");
OutputFormat format = new OutputFormat(" ", true, "utf-8");
XMLWriter xw = new XMLWriter(new FileWriter("src//code2.xml"), format);
xw.write(document);
xw.close();
}
2、使用Dom4j向XML文档的指定位置写入一个元素
public void test4() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src//code2.xml"));
Element root = document.getRootElement();
Element child = DocumentHelper.createElement("天津市");
child.setText("天津纺织工业大学"); //设置元素内容
Element ele = (Element) root.elements("省份").get(1); //获取要写入的元素位置
List list = ele.elements();
list.add(1, child);
OutputFormat format = new OutputFormat(" ", true, "utf-8");
XMLWriter xw = new XMLWriter(new FileWriter("src//code2.xml"), format);
xw.write(document);
xw.close();
}
三、 删除XML文档中节点处的元素
public void test5() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src//code2.xml"));
Element root = document.getRootElement();
Element ele = (Element) root.elements().get(1);
Element et = (Element) ele.elements().get(1);
ele.remove(et);
OutputFormat format = new OutputFormat(" ", true, "utf-8"); //格式化输出对象
XMLWriter xw = new XMLWriter(new FileWriter("src//code2.xml"), format);
xw.write(document);
xw.close();
}
四、 修改XML文档中元素的内容
public void test6() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src//code2.xml"));
Element root = document.getRootElement();
Element ele = (Element) root.elements().get(0);
Element et = (Element) ele.elements().get(0);
et.setText("陕西师范大学"); //修改元素内容
OutputFormat format = new OutputFormat(" ", true, "utf-8");
XMLWriter xw = new XMLWriter(new FileWriter("src//code2.xml"), format);
xw.write(document);
xw.close(); //关闭输出流
}
以上便是利用Dom4j的CRUD操作,其中遍历时的迭代方法很重要。另外在对XML文档中的元素进行修改和删除时的元素节点位置的获取也是一个重点。
- 使用Dom4j解析XML文档
- 使用dom4j解析xml文档
- 使用Dom4j解析XML文档
- 使用dom4j解析XML文档
- 使用dom4j解析XML文档
- 使用Dom4j解析XML文档
- 使用dom4j解析xml文档
- 使用DOM4J解析xml文档
- 使用SAX和dom4j解析XML文档
- XML文档解析包 Dom4j 简单使用
- 使用dom4j生成和解析XML文档
- Dom4j解析XML文档
- dom4j解析xml文档
- DOM4J解析XML文档
- dom4j解析xml文档
- DOM4J解析XML文档
- DOM4J解析XML文档
- Dom4J解析XML文档
- 你说,所以我伤心
- 转:OpenCv,EmguCv及.net之间的互动
- struts2拦截器详解
- 最长无重复字符的子串
- 一、手工建库
- 使用Dom4j解析XML文档
- 如何让MFC自定义类能响应消息
- 二、整库迁移操作
- 设计Qt风格的C++API【转
- SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引
- 使用jqGrid问题解决方法
- poj 2404
- 优化SQL CPU性能
- Oracle LEFT JOIN中ON条件与WHERE条件的区别