• SAXReader


    DOM4j读取XML文件(SAXReader)


    一、

    总结:

    Document document=new SAXReader.reader(“xml文路径/文件名xxx.xml”);//得到Document对象

    Element root = document.getRootElement()//获得根节点

    Iterator iterator=root.elementIterator(); //从根节点遍历子节点

    Iterator iterator=Element.elementIterator(); //再从子节点在遍历其子节点

    对节点访问其属性用:Attribute leaderAttr =Element. attribute(“xxx”);

    对节点访问其某个属性leaderAttr的名称:leaderAttr.getName();
    对节点访问其某个属性leaderAttr的值:leaderAttr.getValue()

    对节点访问其名称:Element.getName();

    对节点访问其文本:Element. getText();

    简单代码为如下:

    Document document=new SAXReader.reader(“xml文路径/文件名xxx.xml”);
    Element root = document.getRootElement();  

    HashMap hm = new HashMap<String,String>();    
    for ( Iterator iter = root.elementIterator(); iter.hasNext(); ) 
    {   Element element = (Element) iter.next(); 
        Attribute ageAttr=element.attribute("age");
            String age = ageAttr.getValue();   

          。。。。。

    for ( Iterator iterInner = element.elementIterator(); iterInner.hasNext(); ) {   

        Element elementInner = (Element) iterInner.next();

        

    //遍历college节点开始

    if(elementInner.getName().equals("college")){

    /添加college的文本

    hm.put(elementInner.getName()+ num, elementInner.getText());

    //添加college的leader属性

    Attribute leaderAttr=elementInner.attribute("leader");

    。。。。。如果leaderAttr不是空字符或者其值不为null。。。。。

    hm.put(elementInner.getName() + "-"+leaderAttr.getName()+ num,

    leaderAttr.getValue());

         }

    else{ //遍历非college节点的其它节点   

         hm.put(elementInner.getName()+ num, elementInner.getText());   

    }  

         

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

    <students>  

        <student age="25"><!--如果没有age属性,默认的为20-->  

            <name>崔卫兵</name>  

            <college>PC学院</college>  

            <telephone>62354666</telephone>  

            <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>  

        </student>  

        <student>  

            <name>cwb</name>  

            <college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader-->  

            <telephone>62358888</telephone>  

            <notes>男,1987年生,硕士,现就读于中国农业大学</notes>  

        </student>  

        <student age="45">  

            <name>xxxxx</name>  

            <college leader="">xxx学院</college>  

            <telephone>66666666</telephone>  

            <notes>注视中,注释中</notes>  

        </student>  

        <student age="">  

            <name>lxx</name>  

            <college>yyyy学院</college>  

            <telephone>88888888</telephone>  

            <notes>注视中111,注释中222</notes>  

        </student>  

    </students>  


    Dom4jReadExmple.java

    package test2;

    import java.io.File;   

    import java.util.HashMap;   

    import java.util.Iterator;   

    import org.dom4j.Attribute;   

    import org.dom4j.Document;   

    import org.dom4j.DocumentException;   

    import org.dom4j.Element;   

    import org.dom4j.io.SAXReader;   

    public class Dom4jReadExmple {    

    public void iterateWholeXML(String filename,HashMap<String,String> hm){   

    SAXReader saxReader = new SAXReader();   

    try {   

       Document document = saxReader.read(new File(filename));   

       Element root = document.getRootElement();   

    //   用于记录学生编号的变量   

       int num=-1;   

       //遍历根结点(students)的所有孩子节点(肯定是student节点)   

             for ( Iterator iter = root.elementIterator(); iter.hasNext(); ) {   

                 Element element = (Element) iter.next();   

                 num++;   

        // 获取person节点的age属性的值   

                 Attribute ageAttr=element.attribute("age");   

        if(ageAttr!=null){   

         String age = ageAttr.getValue();   

         if (age != null&&!age.equals("")) {   

          hm.put(element.getName() + "-"+ageAttr.getName()+ num, age);   

         } else {   

          hm.put(element.getName() + "-" +ageAttr.getName()+ num, "20");   

         }   

        }else{   

         hm.put(element.getName() + "-age"+ num, "20");   

        }   

                 //遍历student结点的所有孩子节点(即name,college,telphone,notes),并进行处理   

                 for ( Iterator iterInner = element.elementIterator(); iterInner.hasNext(); ) {   

                  Element elementInner = (Element) iterInner.next();   

                  if(elementInner.getName().equals("college")){   

                   hm.put(elementInner.getName()+ num, elementInner.getText());   

                   //获取college节点的leader属性的值   

                   Attribute leaderAttr=elementInner.attribute("leader");   

                   if(leaderAttr!=null){   

           String leader = leaderAttr.getValue();   

           if (leader != null&&!leader.equals("")) {   

            hm.put(elementInner.getName() + "-"+leaderAttr.getName()+ num, leader);   

           } else {   

            hm.put(elementInner.getName() + "-" +leaderAttr.getName()+ num, "leader");   

           }   

                   }else {   

           hm.put(elementInner.getName() + "-leader"+ num, "leader");   

          }   

                  }else{   

                   hm.put(elementInner.getName()+ num, elementInner.getText());   

                  }   

                 }   

             }   

      

    } catch (DocumentException e) {   

       // TODO Auto-generated catch block   

       e.printStackTrace();   

    }   

    }   

    }    
    TestDom4jReadExmple.java

    package dom4jExample.read;   

    import java.util.HashMap;   

    public class TestDom4jReadExmple {   

    public static void main(String[] args) {   

         try{   

           //获取解析完后的解析信息   

           HashMap<String,String> hashMap;   

           Dom4jReadExmple drb=new Dom4jReadExmple();   

           //遍历整个XML文件   

           hashMap = new HashMap<String,String>();   

           drb.iterateWholeXML("studentInfo.xml", hashMap);   

           System.out.println("姓名 年龄 学院 学院领导 电话 备注");   

           for(int i=0;i<hashMap.size();i+=6){   

             int j=i/6;   

             System.out.print(hashMap.get("name"+j)+" ");   

             System.out.print(hashMap.get("student-age"+j)+" ");   

             System.out.print(hashMap.get("college"+j)+" ");   

             System.out.print(hashMap.get("college-leader"+j)+" ");   

             System.out.print(hashMap.get("telephone"+j)+" ");   

             System.out.println(hashMap.get("notes"+j)+" ");   

           }   

         }catch(Exception ex){   

           ex.printStackTrace();   

         }   

       }   

    }   

    二、

    一个读写操作的例子:

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.InputStream;

    import java.util.Iterator;

    import org.dom4j.Document;

    import org.dom4j.DocumentHelper;

    import org.dom4j.Element;

    import org.dom4j.io.SAXReader;

    import org.dom4j.io.XMLWriter;

    public class testXml {

    public static void main(String[] args) {

    try {

    testXml test = new testXml();

    test.testWrite();

    test.testRead();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public void testRead() throws Exception{

    SAXReader reader = new SAXReader();

    Document document = reader.read(new FileInputStream("src/output.xml"));

    Element root = document.getRootElement();

    for (Iterator iter = root.elementIterator(); iter.hasNext();) {

    Element element = (Element) iter.next();

    System.out.println(element.getText());

    System.out.println(element.attributeValue("name"));

    System.out.println(element.attributeValue("blog"));

    }

    }

    public void testWrite() throws Exception{

    Document document = DocumentHelper.createDocument();

    Element root = document.addElement("root");

    for(int i=0;i<10;i++){

    Element element1 = root.addElement("user")

    .addAttribute("name","Alex"+i)

    .addAttribute("id", "id"+i)

    .addText("我是信息");

    }

    XMLWriter writer = new XMLWriter(new FileOutputStream("src/output.xml"));

    writer.write(document);

    writer.close();

    }

    }

    输出的效果:

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

    <root>

    <user name="Alex0" id="id0">我是信息</user>

    <user name="Alex1" id="id1">我是信息</user>

    <user name="Alex2" id="id2">我是信息</user>

    <user name="Alex3" id="id3">我是信息</user>

    <user name="Alex4" id="id4">我是信息</user>

    <user name="Alex5" id="id5">我是信息</user>

    <user name="Alex6" id="id6">我是信息</user>

    <user name="Alex7" id="id7">我是信息</user>

    <user name="Alex8" id="id8">我是信息</user>

    <user name="Alex9" id="id9">我是信息</user>

    </root>

  • 相关阅读:
    后台服务器经典面试题
    Java英语面试题(核心知识篇)
    Java常用英语汇总(面试必备)
    字符压缩编码
    外排序
    基数排序
    Windows Server 2008 R2 部署服务
    LINUX中常用操作命令
    我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
    CSDN-Code平台使用过程中的5点经验教训
  • 原文地址:https://www.cnblogs.com/visec479/p/3795830.html
Copyright © 2020-2023  润新知