dom4j解析

本文介绍使用DOM4J库进行XML文件的增删改查操作。通过具体示例展示了如何利用SAXReader读取XML文件,遍历、读取、添加及删除XML节点,并提供了完整的Java代码实现。

dom4j解析

xml

<?xml version="1.0" encoding="utf-8"?>

<!--引入dtd去约束该xml文件-->
<班级> 
  <学生 性别="女" 学号="sp002"> 
    <名字>林青霞</名字>  
    <介绍>学习刻苦</介绍>  
    <年龄>23</年龄> 
  </学生>  
  <学生> 
    <名字>宋江</名字>  
    <年龄/>  
    <介绍/> 
  </学生>  
  <学生>林冲</学生>
  <学生> 
    <名字>宋江</名字>  
    <年龄/>  
    <介绍/> 
  </学生> 
</班级>

sax解析

要引入dom4j的jar包

package com.dom4j.test;

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 java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;

/**
 * Created by 宋贤 on 2015/10/14.
 */
public class Dom4jTest {
    //演示用dom4j来对xml进行crud操作
    public static void main(String[] args) throws Exception{

        SAXReader saxReader=new SAXReader();
        Document document=saxReader.read(new File("src/com/dom4j/test/myClass2.xml"));
//        list(document.getRootElement());
//        read(document);
//        add(document);
//        delete(document);
        addByIndex(document);
    }
    public static void list(Element element){
        System.out.println(element.getName()+" "+element.getTextTrim());
        Iterator iterator=element.elementIterator();
        while (iterator.hasNext()){
            Element element1=(Element)iterator.next();
            list(element1);
        }
    }
    //读取
    public static void read(Document document){
        Element root=document.getRootElement();
        //取出root下的所有学生元素
        Element stu=(Element)root.elements("学生").get(0);
//        System.out.println("名字:"+stu.element("名字").getText());
        Element stu_name=stu.element("名字");
        System.out.println("名字:"+stu_name.getText()+" 性别:"+stu_name.attributeValue("性别"));
        //看下面代码能否跨层取
        //不能跨层取
//        Element stu2=(Element)root.elements("名字").get(0);
//        System.out.println(stu2.getText());
    }
    //读取
    public  static  void add(Document document) throws Exception{
        Element newStu= DocumentHelper.createElement("学生");
        Element newStu_name= DocumentHelper.createElement("名字");
        newStu_name.setText("宋江");
        Element newStu_age= DocumentHelper.createElement("年龄");
        Element newStu_intro= DocumentHelper.createElement("介绍");
        //把三个元素添加到newStu下
        newStu.add(newStu_name);
        newStu.add(newStu_age);
        newStu.add(newStu_intro);
        //把newStu加到根元素之下
        document.getRootElement().add(newStu);
        //可能出现中文乱码
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream(new File("src/com/dom4j/test/myClass2.xml")),format);
        xmlWriter.write(document);
        xmlWriter.close();
    }
    //删除
    public  static void delete(Document document)throws Exception{
        Element stu=document.getRootElement().element("学生");
//        stu.getParent().remove(stu);
        stu.remove(stu.attribute("大哥"));
        //可能出现中文乱码
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream(new File("src/com/dom4j/test/myClass2.xml")),format);
        xmlWriter.write(document);
        xmlWriter.close();
    }
    public static void addByIndex(Document document)throws Exception{
        Element element=DocumentHelper.createElement("学生");
        element.setText("林冲");
        List list=document.getRootElement().elements("学生");
        for (int i=0;i<list.size();i++){
            Element name=((Element)list.get(i)).element("名字");
            if(name.getText().equals("宋江")){
                list.add(i+1,element);
                break;
            }
        }
//        list.add(1,element);
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream(new File("src/com/dom4j/test/myClass2.xml")),format);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}
01-04
package xmllab;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;/*** @author Holen Chen*/public class Dom4jDemo { public Dom4jDemo() { } /** * 建立一个XML文档,文档名由输入属性决定 * @param filename 需建立的文件名 * @return 返回操作结果, 0表失败, 1表成功 */ public int createXMLFile(String filename){ /** 返回操作结果, 0表失败, 1表成功 */ int returnValue = 0; /** 建立document对象 */ Document document = DocumentHelper.createDocument();// /** 建立XML文档的根books */ Element booksElement = document.addElement("books");// /** 加入一行注释 */ booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");// /** 加入第一个book节点 */ Element bookElement = booksElement.addElement("book");// /** 加入show属性内容 */ bookElement.addAttribute("show","yes");// /** 加入title节点 */ Element titleElement = bookElement.addElement("title");// /** 为title设置内容 */ titleElement.setText("Dom4j Tutorials");//Dom4j Tutorials /** 类似的完成后两个book */ bookElement = booksElement.addElement("book"); bookElement.addAttribute("show","yes"); titleElement = bookElement.addElement("title"); titleElement.setText("Lucene Studing"); bookElement = booksElement.addElement("book"); bookElement.addAttribute("show","no"); titleElement = bookElement.addElement("title"); titleElement.setText("测试"); /** 加入owner节点 */ Element ownerElement = booksElement.addElement("owner"); ownerElement.setText("O'Reilly"); try{ /** 将document中的内容写入文件中 */ XMLWriter writer = new XMLWriter(new FileWriter(new File(filename))); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } /** * 修改XML文件中内容,并另存为一个新文件 * 重点掌握dom4j中如何添加节点,修改节点,删除节点 * @param filename 修改对象文件 * @param newfilename 修改后另存为该文件 * @return 返回操作结果, 0表失败, 1表成功 */ public int ModiXMLFile(String filename,String newfilename){ int returnValue = 0; try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); /** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */ /** 先用xpath查找对象 */ List list = document.selectNodes("/books/book/@show" ); Iterator iter = list.iterator(); while(iter.hasNext()){ Attribute attribute = (Attribute)iter.next(); if(attribute.getValue().equals("yes")){ attribute.setValue("no"); } } /** * 修改内容之二: 把owner项内容改为Tshinghua * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type */ list = document.selectNodes("/books/owner" ); iter = list.iterator(); if(iter.hasNext()){ Element ownerElement = (Element)iter.next(); ownerElement.setText("Tshinghua"); Element dateElement = ownerElement.addElement("date"); dateElement.setText("2007-09-06"); dateElement.addAttribute("type","Gregorian calendar"); } /** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */ list = document.selectNodes("/books/book"); iter = list.iterator(); while(iter.hasNext()){ Element bookElement = (Element)iter.next(); Iterator iterator = bookElement.elementIterator("title"); while(iterator.hasNext()){ Element titleElement=(Element)iterator.next(); if(titleElement.getText().equals("Dom4j Tutorials")){ bookElement.remove(titleElement); } } } try{ /** 将document中的内容写入文件中 */ XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename))); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } /** * 格式化XML文档,并解决中文问题 * @param filename * @return */ public int formatXMLFile(String filename){ int returnValue = 0; try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); XMLWriter writer = null; /** 格式化输出 */ OutputFormat format = OutputFormat.createPrettyPrint(); /** 指定XML编码 */ format.setEncoding("GBK"); writer= new XMLWriter(new FileWriter(new File(filename)),format); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } public static void main(String[] args) { Dom4jDemo temp = new Dom4jDemo(); //System.out.println(temp.createXMLFile("d://testxml.xml")); //System.out.println(temp.ModiXMLFile("d://testxml.xml","d://testxml2.xml"));// try{ System.out.println(temp.formatXMLFile("d://testxml2.xml"));// // System.out.println(temp.formatXMLFile("E:\\test.xml"));// }// catch(Exception e)// {// // e.printStackTrace();// System.out.print("error!");//// } }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值