Xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<student>
<!--first xml-->
<call show="no">
<name>studentname</name>
<English>78</English>
<Chinese>78</Chinese>
<Japan>98</Japan>
</call>
<call show="no">
<name>studentname</name>
<English>77</English>
<Chinese>68</Chinese>
<Japan>88</Japan>
</call>
</student>
JAVA文件:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* DOM4j对xml文件的操作
* 操作DOM4j的时候注意要导入3个jar包,否则会报异常
* dom4j-1.6.1.jar
* jaxen-1.1-beta-6.jar
* saxpath.jar
* */
public class ReaderDom4j {
/**
* 创建一个xml文件
**/
public static void createxml() {
//使用 DocumentHelper 类创建一个文档实例。DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。
Document document = DocumentHelper.createDocument();
//使用 addElement() 方法创建根元素 student
Element booksElement = document.addElement("student");
booksElement.addComment("first xml");
//在 student 元素中使用 addElement() 方法增加 call 元素。
Element book1Elment = booksElement.addElement("call");
//在call元素里增加show属性,show属性的值是yes
book1Elment.addAttribute("show", "yes");
//在 call 元素中使用 addElement() 方法增加 name 元素。
Element book2Element = book1Elment.addElement("name");
//设置name标签的内容
book2Element.setText("zhangsan");
Element book3Element = book1Elment.addElement("English");
book3Element.setText("78");
Element book4Element = book1Elment.addElement("Chinese");
book4Element.setText("78");
Element book5Element = book1Elment.addElement("Japan");
book5Element.setText("98");
book1Elment = booksElement.addElement("call");
book1Elment.addAttribute("show", "yes");
book2Element = book1Elment.addElement("name");
book2Element.setText("wangwu");
book3Element = book1Elment.addElement("English");
book3Element.setText("77");
book4Element = book1Elment.addElement("Chinese");
book4Element.setText("68");
book5Element = book1Elment.addElement("Japan");
book5Element.setText("88");
try {
//格式化输出xml文件,兼容ie的格式化输出
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
//把xml文件从内存中写入文件
XMLWriter writer = new XMLWriter(new FileWriter("myxml.xml"),
format);
writer.write(document);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
/**
* 对xml文件的修改操作
* 修改xml文件以后要重新把xml文件从内存中写入文件,否则修改的只是内存中的xml,实际文件不会改变
* DOM4j操作xml文件是一次性把所有数据读入内存中,所以xml文件过大不能用dom4j去解析
* */
public static void modifyxml(){
//使用SAXReader去解析xml文件
SAXReader reader=new SAXReader();
Document document;
try {
File file = new File("C:\\workspace\\Test\\myxml.xml");
//获取document对象
document=reader.read(file);
//通过selectNodes寻找节点或者属性
List list=document.selectNodes("/student/call/@show");
Iterator it=list.iterator();
while(it.hasNext()){
//Attribute属性的操作方法
Attribute attribute=(Attribute)it.next();
if(attribute.getValue().equals("yes"))
{
attribute.setValue("no");
}
}
list =document.selectNodes("/student/call/name");
it=list.iterator();
while(it.hasNext()){
//标签内容的操作方法
Element nameElment=(Element)it.next();
nameElment.setText("studentname");
}
//删除某个节点是要用两层循环,因为删除当前节点必须用父节点去删除。
list=document.selectNodes("/student/call");
it=list.iterator();
while(it.hasNext()){
//获取父节点
Element scoreElement=(Element)it.next();
System.out.println(scoreElement);
@SuppressWarnings("unused")
//获取该父节点下面的需要查找的子节点
Iterator itera=scoreElement.elementIterator("English");
while(itera.hasNext()){
Element scoreEnglish=(Element)itera.next();
if(scoreEnglish.getText().equals("77")){
//利用父节点去删除
scoreElement.remove(scoreEnglish);
}
}
}
@SuppressWarnings("unused")
/* Iterator itera=document.getRootElement().elementIterator("call");
while(itera.hasNext()){
Element ele=(Element)itera.next();
System.out.println(ele);
}*/
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer;
try {
writer = new XMLWriter(new FileWriter("myxml.xml"),
format);
writer.write(document);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String args[]){
ReaderDom4j.createxml();
ReaderDom4j.modifyxml();
}
}
总结如下:
创建xml文件
获取document对象
Document document =DocumentHelper.createDocument();
创建节点
父节点.addElement(“子节点”);
创建节点的内容
节点.setText(“内容”);
创建节点的属性及内容
节点.addAttribute(“属性名”,”属性值”);
修改xml的操作
获取SAXReader的对象
SAXReader reader=new SAXReader();
获取document对象
Document document=reader.read(new File(“路径名”))
获取根节点
document.getRootElement();
获取根节点一下的某个节点的迭代
Iterator it= document.getRootElement().elementIterator();
获取元素迭代器
Iterator it=document.selectNodes(“/student/call/name/@show”);(获取根节点一下call节点一下
Name节点的属性show的值)
修改属性的值
attribute.setValue();
修改标签的内容
element.setText();
删除便签
父节点.remove(子节点);
<?xml version="1.0" encoding="UTF-8"?>
<student>
<!--first xml-->
<call show="no">
<name>studentname</name>
<English>78</English>
<Chinese>78</Chinese>
<Japan>98</Japan>
</call>
<call show="no">
<name>studentname</name>
<English>77</English>
<Chinese>68</Chinese>
<Japan>88</Japan>
</call>
</student>
JAVA文件:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* DOM4j对xml文件的操作
* 操作DOM4j的时候注意要导入3个jar包,否则会报异常
* dom4j-1.6.1.jar
* jaxen-1.1-beta-6.jar
* saxpath.jar
* */
public class ReaderDom4j {
/**
* 创建一个xml文件
**/
public static void createxml() {
//使用 DocumentHelper 类创建一个文档实例。DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。
Document document = DocumentHelper.createDocument();
//使用 addElement() 方法创建根元素 student
Element booksElement = document.addElement("student");
booksElement.addComment("first xml");
//在 student 元素中使用 addElement() 方法增加 call 元素。
Element book1Elment = booksElement.addElement("call");
//在call元素里增加show属性,show属性的值是yes
book1Elment.addAttribute("show", "yes");
//在 call 元素中使用 addElement() 方法增加 name 元素。
Element book2Element = book1Elment.addElement("name");
//设置name标签的内容
book2Element.setText("zhangsan");
Element book3Element = book1Elment.addElement("English");
book3Element.setText("78");
Element book4Element = book1Elment.addElement("Chinese");
book4Element.setText("78");
Element book5Element = book1Elment.addElement("Japan");
book5Element.setText("98");
book1Elment = booksElement.addElement("call");
book1Elment.addAttribute("show", "yes");
book2Element = book1Elment.addElement("name");
book2Element.setText("wangwu");
book3Element = book1Elment.addElement("English");
book3Element.setText("77");
book4Element = book1Elment.addElement("Chinese");
book4Element.setText("68");
book5Element = book1Elment.addElement("Japan");
book5Element.setText("88");
try {
//格式化输出xml文件,兼容ie的格式化输出
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
//把xml文件从内存中写入文件
XMLWriter writer = new XMLWriter(new FileWriter("myxml.xml"),
format);
writer.write(document);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
/**
* 对xml文件的修改操作
* 修改xml文件以后要重新把xml文件从内存中写入文件,否则修改的只是内存中的xml,实际文件不会改变
* DOM4j操作xml文件是一次性把所有数据读入内存中,所以xml文件过大不能用dom4j去解析
* */
public static void modifyxml(){
//使用SAXReader去解析xml文件
SAXReader reader=new SAXReader();
Document document;
try {
File file = new File("C:\\workspace\\Test\\myxml.xml");
//获取document对象
document=reader.read(file);
//通过selectNodes寻找节点或者属性
List list=document.selectNodes("/student/call/@show");
Iterator it=list.iterator();
while(it.hasNext()){
//Attribute属性的操作方法
Attribute attribute=(Attribute)it.next();
if(attribute.getValue().equals("yes"))
{
attribute.setValue("no");
}
}
list =document.selectNodes("/student/call/name");
it=list.iterator();
while(it.hasNext()){
//标签内容的操作方法
Element nameElment=(Element)it.next();
nameElment.setText("studentname");
}
//删除某个节点是要用两层循环,因为删除当前节点必须用父节点去删除。
list=document.selectNodes("/student/call");
it=list.iterator();
while(it.hasNext()){
//获取父节点
Element scoreElement=(Element)it.next();
System.out.println(scoreElement);
@SuppressWarnings("unused")
//获取该父节点下面的需要查找的子节点
Iterator itera=scoreElement.elementIterator("English");
while(itera.hasNext()){
Element scoreEnglish=(Element)itera.next();
if(scoreEnglish.getText().equals("77")){
//利用父节点去删除
scoreElement.remove(scoreEnglish);
}
}
}
@SuppressWarnings("unused")
/* Iterator itera=document.getRootElement().elementIterator("call");
while(itera.hasNext()){
Element ele=(Element)itera.next();
System.out.println(ele);
}*/
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer;
try {
writer = new XMLWriter(new FileWriter("myxml.xml"),
format);
writer.write(document);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String args[]){
ReaderDom4j.createxml();
ReaderDom4j.modifyxml();
}
}
总结如下:
创建xml文件
获取document对象
Document document =DocumentHelper.createDocument();
创建节点
父节点.addElement(“子节点”);
创建节点的内容
节点.setText(“内容”);
创建节点的属性及内容
节点.addAttribute(“属性名”,”属性值”);
修改xml的操作
获取SAXReader的对象
SAXReader reader=new SAXReader();
获取document对象
Document document=reader.read(new File(“路径名”))
获取根节点
document.getRootElement();
获取根节点一下的某个节点的迭代
Iterator it= document.getRootElement().elementIterator();
获取元素迭代器
Iterator it=document.selectNodes(“/student/call/name/@show”);(获取根节点一下call节点一下
Name节点的属性show的值)
修改属性的值
attribute.setValue();
修改标签的内容
element.setText();
删除便签
父节点.remove(子节点);