码迷,mamicode.com
首页 > 其他好文 > 详细

DOM4j 操作XML

时间:2015-09-23 18:42:26      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

<?xml version="1.0" encoding="GBK"?>  
<persons>
    <men>
        <person id = "20111907">潘腾</person>
        <person id = "20111901">雷帅</person>
    </men>
    <women>
        <person id = "20111908">杨悦</person>
        <person id = "20111908">张东月</person>
    </women>
</persons>
import java.io.*;
import java.io.File;
import java.io.FileOutputStream;  
import java.io.FileWriter;  
import org.dom4j.*;
import org.dom4j.io.*;
import java.util.*;
import org.jaxen.*;
public class DOM_XML {
    public static void main(String[] args)
    {
        try
        {
//            read_xml1();
//            read_xml2();
//            read_xml3();
//            read_xml4();
//            creatXml();
            modifyXML();
        }
        catch(Exception e)
        {
            System.out.println("错误信息:" + e);
        }
    }
    
    /**
     * 第一种方式 使用迭代器读XML
     */
    public static void read_xml1()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
            Iterator it = root.elementIterator();                    //<men>   <women>
            while(it.hasNext())
            {
                Element ele = (Element)it.next();
                Iterator sec_it = ele.elementIterator();
                while(sec_it.hasNext())
                {
                    Element man = (Element)sec_it.next();      //不调用next方法,就不会下移  便会产生死循环
                    String name = man.getName();    
                    String attr = man.attributeValue("id");
                    String content = man.getText();
                    System.out.println("name:" + name + "\nid: " + attr + "\nContent: " + content);
                }
            }
        }
        catch(Exception e)
        {
            
        }
    }
    
    /**
     * 第二种方式 elements
     */
    public static void read_xml2()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
            List<Element> listEle = root.elements("men");            //获取root下的所有men元素
             List<Element> listMen = listEle.get(0).elements("person");        //获取men下的所有person元素
             for(Element element_obj:listMen)
             {
                String name = element_obj.getName();    
                String attr = element_obj.attributeValue("id");
                String content = element_obj.getText();
                System.out.println("name:" + name + "\nid: " + attr + "\nContent: " + content);
             }
        }
        catch(Exception e)
        {
            
        }
    }
    
    /**
     * 第三种方式  使用适配器  这个暂时没有搞懂
     */
    public static void read_xml3()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
             
             //第三种方式 适配器
             doc.accept(new VisitorSupport() {//使用观察器的子类,来完成对xml文件的读取。
                   
                   public void visit(Element el) {//利用观察期进行xml的读取。
                    
                    System.out.println(el.getName()+": "+el.getText());
                   }
                   
                  });
        }
        catch(Exception e)
        {
            
        }
        
    }
    
    /**
     * 第四种方式 selectNodes
     * selectNodes的参数是元素路径  需要学习XPath相关知识
     */
    public static void read_xml4()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
             
    
            //第四种 使用selectNodes读取XML
            //需要导入 org.jaxen.* 包   否则会报错
            List list = doc.selectNodes("//persons/men/person");//使用selectNodes获取所要查询xml的节点。
             for(Object obj:list){//遍历节点,获取节点内数据。                   
                   Element el = (Element)obj;
                   System.out.println(el.getText());
                  }
        }
        catch(Exception e)
        {}
    }

    /**
     * 创建XML文件 
     * XML文件第一行 encoding值为UTF-8   这是错误的
     * java 在windows 中文版环境下 默认采用的是GBK,所以需要手动更改
     */
    public static void creatXml()
    {
        try
        {
            Document newdoc = DocumentHelper.createDocument();
            Element persons = newdoc.addElement("persons");
            Element men = persons.addElement("men");
            Element person1 = men.addElement("person");
            person1.addAttribute("id", "20111907");
            person1.setText("panteng");
            Element person2 = men.addElement("person");
            person2.addAttribute("id", "20111901");
            person2.setText("leishuai");
            
            File newxml = new File("newFile.xml");
            if(newxml.exists())
            {
                newxml.delete();
            }
            newxml.createNewFile();    //创建文件
            XMLWriter out = new XMLWriter(new FileWriter(newxml));
            out.write(newdoc);
            out.flush();
            out.close();
            System.out.println("文件创建完毕");
        }
        catch(Exception e)
        {
            
        }
    }

    /**
     * 修改XML   删除节点、修改 添加属性
     */
    public static void modifyXML()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
            Element men = root.element("men");
            //删除雷帅的记录元素
            Iterator it = men.elementIterator();
            while(it.hasNext())
            {
                Element ele = (Element)it.next();
                if(ele.getText().equals("雷帅"))
                {
                    men.remove(ele);
                }
            }
            //增加伟男记录
            Element weiNan = men.addElement("person");
            weiNan.setText("伟男");
            
            //修改 潘腾的id 并增加age属性
            Iterator it2 = men.elementIterator();
            while(it2.hasNext())
            {
                Element ele = (Element)it2.next();
                if(ele.getText().equals("潘腾"))
                {
                    ele.setAttributeValue("id", "080635");
                    ele.addAttribute("age", "23");
                }
            }
            
            File newxml = new File("newFile.xml");
            if(newxml.exists())
            {
                newxml.delete();
            }
            newxml.createNewFile();    //创建文件
            XMLWriter out = new XMLWriter(new FileWriter(newxml));
            out.write(doc);
            out.flush();
            out.close();
            System.out.println("文件更新完毕");
        }
        catch(Exception e)
        {
            System.out.println("错误信息:" + e);
        }

    }
}

不难看出,JAVA  对xml的修改,实际上是修改了doc对象,然后删除原来的文件,将这个对象 重新写入一个文件,文件名和原先的相同。

DOM4j 操作XML

标签:

原文地址:http://www.cnblogs.com/tengpan-cn/p/4832624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!