`
luoxiaofei5210
  • 浏览: 6310 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DOM4j解析xml文件

    博客分类:
  • java
阅读更多
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(子节点);
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics