对xml文件进行删除,添加操作,以至于达到更新节点目的;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
/**
<?xml version="1.0" encoding="UTF-8"?>
<四大名著>
<西游记 id="x001">
<作者>吴承恩1</作者>
<作者>吴承恩2</作者>
<朝代>明朝</朝代>
</西游记>
<红楼梦 id="x002">
<作者>曹雪芹</作者>
</红楼梦>
</四大名著>
*
*
* @author MY
*
*/
public class Demo4jDemo {
@Test
public void test1() throws Exception{
String file="conf/demo/sida.xml";
String code="utf-8";
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
Document document = reader.read(new File(file));
//获取根节点元素对象
Element node = document.getRootElement();
// updateElementNode(node,"红楼梦","三国","id","123","作者","徐良");
// updateElementNode(node,"红楼梦","作者","作者","徐良");
// updateElementAttr(node,"红楼梦","id","a","v");
// listNodes(node);
elementMethod(node,"西游记");
elementMethod(node,"西游记","作者",false);
writer(document,file,code);
}
/**
* 更新节点 删除红楼梦,添加三国
updateElementNode(node,"红楼梦","三国","id","123","作者","徐良");
<四大名著>
<西游记 id="x001">
<作者>吴承恩1</作者>
<作者>吴承恩2</作者>
<朝代>明朝</朝代>
</西游记>
<三国 id="123">
<作者>徐良</作者>
</三国>
</四大名著>
*/
public void updateElementNode(Element node,String name,String p2name,String p2attrid,String p2attrname,String nodeName,String nodeText){
Element element = node.element(name);
//删除元素节点
boolean flag = node.remove(element);
Element p2=null;
if("".equals(p2attrid) || p2attrid==null){
p2=node.addElement(p2name);
}else{
p2=node.addElement(p2name).addAttribute(p2attrid,p2attrname);
}
Element newElement = p2.addElement(nodeName);
newElement.setText(nodeText);
}
/**
* 更新节点 把红楼梦的作者改为徐良
* updateElementNode(node,"红楼梦","作者","作者","徐良");
<四大名著>
<西游记 id="x001">
<作者>吴承恩1</作者>
<作者>吴承恩2</作者>
<朝代>明朝</朝代>
</西游记>
<红楼梦 id="x002">
<作者>徐良</作者>
</红楼梦>
</四大名著>
*/
public void updateElementNode(Element node,String name,String p2name,String nodeName,String nodeText){
Element element = node.element(name);
Element p2node =element.element(p2name);
//删除元素节点
boolean flag = element.remove(p2node);
Element newElement = element.addElement(nodeName);
newElement.setText(nodeText);
}
/**
* 对节点的属性更新
* updateElementAttr(node,"红楼梦","id","a","v");
<四大名著>
<西游记 id="x001">
<作者>吴承恩1</作者>
<作者>吴承恩2</作者>
<朝代>明朝</朝代>
</西游记>
<红楼梦 a="v">
<作者>曹雪芹</作者>
</红楼梦>
</四大名著>
*/
public void updateElementAttr(Element node,String name,String id,String attrid,String attrname){
Element element = node.element(name);
//获取element的id属性节点对象
Attribute attr = element.attribute(id);
//删除属性
element.remove(attr);
//添加新的属性
element.addAttribute(attrid, attrname);
}
/**
* 把document对象写入新的文件
*
* @param document
* @throws Exception
*/
public void writer(Document document,String file,String code) throws Exception {
// 紧凑的格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 排版缩进的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码
format.setEncoding(code);
// 创建XMLWriter对象,指定了写出文件及编码格式
// XMLWriter writer = new XMLWriter(new FileWriter(new File("src//a.xml")),format);
XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(file)),code), format);
// 写入
writer.write(document);
// 立即写入
writer.flush();
// 关闭操作
writer.close();
}
/**
* 遍历当前节点元素下面的所有(元素的)子节点
*
* @param node
*/
public void listNodes(Element node) {
System.out.println("当前节点的名称::" + node.getName());
// 获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
// 遍历属性节点
for (Attribute attr : list) {
System.out.println(attr.getText() + "-----" + attr.getName() + "---" + attr.getValue());
}
if (!(node.getTextTrim().equals(""))) {
System.out.println("文本内容::::" + node.getText());
}
// 当前节点下面子节点迭代器
Iterator<Element> it = node.elementIterator();
// 遍历
while (it.hasNext()) {
// 获取某个子节点对象
Element e = it.next();
// 对子节点进行遍历
listNodes(e);
}
}
/**
* 获取根节点下面的name的所有子节点
* elementMethod(node,"西游记");
*
*/
public Map<String ,List> elementMethod(Element node,String name) {
Map<String ,List> map=new HashMap<String,List>();
Element e = node.element(name);
// 获取西游记这个元素节点 所有元素的子节点。
List<Element> elements = e.elements();
map.put(name, elements);
for (Element el : elements) {
System.out.println(el.getText());
}
return map;
}
/**
* elementMethod(node,"西游记","作者",false);
* @param node
* @param name
* @param elementName
* @param flag
* @return
*/
public Map elementMethod(Element node,String name,String elementName,boolean flag) {
Map<String ,Object> map=new HashMap<String,Object>();
Element e = node.element(name);
if(flag){ //选中第一个
Element author = e.element(elementName);
map.put(elementName, author);
System.out.println(e.getName() + "----" + author.getText());
}else{ // 获取name这个元素节点 中,所有子节点名称为elementName元素的节点 。
List<Element> authors = e.elements(elementName);
map.put(elementName, authors);
for (Element aut : authors) {
System.out.println(aut.getText());
}
}
return map;
}
}
字符串与XML互转换案例
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
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;
/**
* 字符串与XML互转换案例
* @author MY
*
*/
public class Demo4jDemo2 {
public Demo4jDemo2() {
// TODO Auto-generated constructor stub
}
// @Test
public void test() throws Exception {
// 创建saxreader对象
SAXReader reader = new SAXReader();
// 读取一个文件,把这个文件转换成Document对象
Document document = reader.read(new File("conf/demo/a.xml"));
// 获取根元素
Element root = document.getRootElement();
// 把文档转换字符串
String docXmlText = document.asXML();
System.out.println(docXmlText);
System.out.println("---------------------------");
// csdn元素标签根转换的内容
String rootXmlText = root.asXML();
System.out.println(rootXmlText);
System.out.println("---------------------------");
// 获取java元素标签 内的内容
Element e = root.element("西游记");
System.out.println(e.asXML());
}
/**
* 创建一个document对象 往document对象中添加节点元素 转存为xml文件
*
* @throws Exception
*/
// @Test
public void test2() throws Exception {
Document document = DocumentHelper.createDocument();// 创建根节点
Element root = document.addElement("csdn");
Element java = root.addElement("java");
java.setText("java班");
Element ios = root.addElement("ios");
ios.setText("ios班");
writer(document);
}
/**
* 把一个文本字符串转换Document对象
*
* @throws Exception
*/
// @Test
public void test1() throws Exception {
String text = "<csdn><java>Java班</java><net>Net班</net></csdn>";
Document document = DocumentHelper.parseText(text);
Element e = document.getRootElement();
System.out.println(e.getName());
writer(document);
}
/**
* 把document对象写入新的文件
*
* @param document
* @throws Exception
*/
public void writer(Document document) throws Exception {
// 紧凑的格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 排版缩进的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码
format.setEncoding("UTF-8");
// 创建XMLWriter对象,指定了写出文件及编码格式
// XMLWriter writer = new XMLWriter(new FileWriter(new File("src//a.xml")),format);
XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream(new File("conf/demo/a.xml")), "UTF-8"), format);
// 写入
writer.write(document);
// 立即写入
writer.flush();
// 关闭操作
writer.close();
}
}