首页 > 代码库 > Dom4J解析XML文件

Dom4J解析XML文件

首先导入jar包:dom4j-1.6.1.jar

一、DOM4j中,获得Document对象的方式有三种:

1.读取XML文件,获得document对象

   SAXReader parser = new SAXReader();                                //获取解析对象
        Document doc = parser.read(new File("people.xml"));

2.解析XML形式的文本,得到document对象.

  String text = "<blog></blog>";              

   Document document = DocumentHelper.parseText(text);

3.主动创建document对象.

  Document doc = DocumentHelper.createDocument();               //获取document对象
        
        Element root = doc.addElement("peoples");               //为Document设置根元素

二、节点对象操作的方法

 

//    1.获取文档的根节点.
    Element root = document.getRootElement();
//  2.取得某个节点的子节点.
    Element element=node.element(“四大名著");
//  3.取得节点的文字
      String text=node.getText();
//  4.取得某节点下所有名为“csdn”的子节点,并进行遍历.
     List nodes = rootElm.elements("csdn");
        for (Iterator it = nodes.iterator(); it.hasNext();) {
      Element elm = (Element) it.next();  
    // do something
}
//   5.对某节点下的所有子节点进行遍历.    
    for(Iterator it=root.elementIterator();it.hasNext();){   
      Element element = (Element) it.next();     
     // do something
}
//  6.在某节点下添加子节点
    Element elm = newElm.addElement("朝代");
//  7.设置节点文字.  elm.setText("明朝");
//  8.删除某节点.//childElement是待删除的节点,parentElement是其父节点  
    parentElement.remove(childElment);
//  9.添加一个CDATA节点.Element contentElm = infoElm.addElement("content");contentElm.addCDATA(“cdata区域”);

 

三、节点对象的属性方法操作

//    1.取得某节点下的某属性    Element root=document.getRootElement();        //属性名name
    Attribute attribute=root.attribute("id");
//2.取得属性的文字
String text=attribute.getText();
//3.删除某属性 Attribute attribute=root.attribute("size"); root.remove(attribute);
//4.遍历某节点的所有属性   
 Element root=document.getRootElement();      
  for(Iterator it=root.attributeIterator();it.hasNext();){        
      Attribute attribute = (Attribute) it.next();         
      String text=attribute.getText();        
      System.out.println(text);  
}
//5.设置某节点的属性和文字.   
  newMemberElm.addAttribute("name", "sitinspring");
//6.设置属性的文字   
  Attribute attribute=root.attribute("name");   
  attribute.setText("csdn");

四、将文档写入XML文件

 

public static void createXML(){
        
        Document doc = DocumentHelper.createDocument();               //获取document对象
        doc.addComment("认得信息xml文件");                           //设置注释信息
        
        Element root = doc.addElement("peoples");               //为Document设置根元素
        
        //设置第一个儿子元素
        Element per1 = root.addElement("person");               //为根元素设置儿子元素
        per1.addAttribute("pid", "1");                           //设置儿子元素的属性
        //设置孙子元素
        Element pnameEle = per1.addElement("pname");           //为儿子元素设置孙子元素
        pnameEle.setText("张三");                                   //设置孙子元素的内容
        Element psexEle = per1.addElement("psex");
        psexEle.setText("男");
        Element page = per1.addElement("page");
        page.setText("20");
        Element phone = per1.addElement("phone");
        phone.setText("1111111111");
        
        //设置第二个儿子元素
        Element per2 = root.addElement("person");
        per2.addAttribute("pid", "2");
        //设置孙子元素
        Element pnameEle2 = per2.addElement("pname");
        pnameEle2.setText("王五");
        Element psexEle2 = per2.addElement("psex");
        psexEle2.setText("男");
        Element page2 = per2.addElement("page");
        page2.setText("20");
        Element phone2 = per2.addElement("phone");
        phone2.setText("11122233389");
        //设置第三个儿子元素
        Element per3 = per2.createCopy();                       //通过第二个儿子复制设置第三个儿子
        per3.attribute("pid").setValue("3");                   //修改第三个儿子的属性
        per3.element("pname").setText("李四");                   //修改第三个儿子的孙子元素
        root.add(per3);                                           //将第三个儿子添加到根元素中
        
        OutputFormat format = new OutputFormat();               //定义把document进行输入的格式
        
        format.setEncoding("UTF-8");                           //输入的编码格式
        format.setIndent(true);                                   //输入是否缩进
        format.setIndent("  ");                                   //输入缩进的间距
        format.setNewlines(true);                               //换行输入
        
        OutputStream os;                                          
        try {
            os = new FileOutputStream("people.xml");           //获取输出流
            
            try {
                XMLWriter writer = new XMLWriter(os, format);  //设置输出流的格式
                
                try {
                    writer.write(doc);                           //输出doc内容
                    writer.close();                               //关闭资源
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        

 

五、字符串与XML的转换

 

//    1.将字符串转化为XML
    String text = "<csdn> <java>Java班</java></csdn>";
     Document document = DocumentHelper.parseText(text);
//  2.将文档或节点的XML转化为字符串.
     SAXReader reader = new SAXReader();
      Document   document = reader.read(new File("csdn.xml"));            
     Element root=document.getRootElement();    
     String docXmlText=document.asXML();
     String rootXmlText=root.asXML();
      Element memberElm=root.element("csdn");
     String memberXmlText=memberElm.asXML();

 

六、解析XML

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

<!--认得信息xml文件-->
<peoples>
  <person pid="1">
    <pname>张三</pname>
    <psex></psex>
    <page>20</page>
    <phone>1111111111</phone>
  </person>
  <person pid="2">
    <pname>王五</pname>
    <psex></psex>
    <page>20</page>
    <phone>11122233389</phone>
  </person>
  <person pid="3">
    <pname>李四</pname>
    <psex></psex>
    <page>20</page>
    <phone>11122233389</phone>
  </person>
</peoples>
/*
     * 解析xml文件
     */
    public static void parseXML(){
        
        SAXReader parser = new SAXReader();                                //获取解析对象
        Document doc;
        try {
            doc = parser.read(new File("people.xml"));                    //获取document对象
            
            Element root = doc.getRootElement();                        //获取根元素对象
            String rootName = root.getName();                            //获取根元素对象名称
            System.out.println(rootName);                                //输出根元素名称
            
            //获取个输出儿子元素
            Iterator<Element> list = root.elementIterator();                        //获取根元素的儿子对象
            //遍历根元素下的儿子对象
            while(list.hasNext()){
                Element son = list.next();
                String eName = son.getName();                                //获取儿子对象的名称
                System.out.println(eName);
                
                List<Attribute> attr = son.attributes();                    //获取儿子对象的属性
                //遍历儿子对象的属性
                for(Attribute att:attr){
                    String attName = att.getName();                        //获取儿子对象属性的名称
                    String attValue = http://www.mamicode.com/att.getValue();                    //获取儿子对象属性的值
                    System.out.println(attName+"++++++++"+attValue);
                }
                
                //获取个输出孙子对象
                List<Element> grandson = son.elements();            //获取孙子对象
                
                //遍历孙子对象
                for(Element child:grandson){
                    String childName = child.getName();                    //获取孙子对象名称
                    
                    String childText = child.getText();                    //获取孙子元素的内容
                    
                    System.out.println(childName+"++++++++"+childText);
                    
                }
            }
        } catch (DocumentException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }