您的位置:首页 > 其它

Dom4J操作xml文档

2015-10-17 22:23 260 查看
package com.fly.dom4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.List;

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 Demo1 {

// 读取xml文档第二本书的书名
@Test
public void read() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
// 得到根节点
Element root = document.getRootElement();
Element book = (Element) root.elements("书").get(1);
String value = book.element("书名").getText();
System.out.println(value);
}

// 读取xml文档第二本书的书名的属性
@Test
public void readAttr() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
// 得到根节点
Element root = document.getRootElement();
Element book = (Element) root.elements("书").get(1);
// String value = book.element("书名").attribute("name").getValue();
String value = book.element("书名").attributeValue("name");
System.out.println(value);
}

// 在第一本书上添加一个新的售价
@Test
public void add() throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/book.xml"));
// 得到根节点
Element book = doc.getRootElement().element("书");
book.addElement("售价").setText("209元");

// 指定格式化输入器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");

// 写回 可能会因为编码问题出现乱码
// XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"));
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream("src/book.xml"), "gb2312"), format);
writer.write(doc);
writer.close();
}

// 在第一本书上添加一个新的售价
@Test
public void add1() throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/book.xml"));
// 得到根节点
Element book = doc.getRootElement().element("书");
book.addElement("售价").setText("209元");

// 指定格式化输入器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");

// 写回 可能会因为编码问题出现乱码
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),
format);
writer.write(doc);
writer.close();
}

// 在第一本书指定位置添加一个新的售价 更改保存了所有node的list集合的顺序
@Test
public void add2() throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/book.xml"));
// 得到根节点
Element book = doc.getRootElement().element("书");
List list = book.elements(); // [书名,作者,售价]

Element price = DocumentHelper.createElement("售价");
price.setText("209元");

list.add(2, price);

// 指定格式化输入器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");

// 写回 可能会因为编码问题出现乱码
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),
format);
writer.write(doc);
writer.close();
}

// 删除添加的节点
@Test
public void delete() throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/book.xml"));

Element price = (Element) doc.getRootElement().element("书")
.elements("售价").get(1);
price.getParent().remove(price);

// 指定格式化输入器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");

// 写回 可能会因为编码问题出现乱码
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),
format);
writer.write(doc);
writer.close();
}

//修改指定属性值
@Test
public void update() throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/book.xml"));

Element book = (Element) doc.getRootElement().elements("书").get(1);
book.element("作者").setText("活活命");

// 指定格式化输入器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");

// 写回 可能会因为编码问题出现乱码
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),
format);
writer.write(doc);
writer.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: