XML文档解析

XML文档解析
        1.DOM4J概述:DOM4J是一个易用的、开源的库,可以实现对XML文档的解析
        2.Document对象相关
                读取XML文件,获得Document对象
                    SAXReader reader = new SAXReader();
                    Document document = reader.read(new read(new File("input.xml")));
        3.节点相关
                (1)获取文档的根元素
                        Element rootElm = document.getRootElement();
              (2)取得某节点的单个子节点
                        Element memberElm=root.element("member");        //“member”是节点名
                (3)取得节点的文字
                        String text = memberElm.getText();
                (4)取得某节点下名为“member”的所有字节点并进行遍历
                        List nodes = rootElm.elements("member");
                        for(Iterator it = nodes.iterator();it.hasNext();){
                            Element elm = (Element)it.next();
                            //.....
                        }
                (5)对某节点下的所有字节点进行遍历
                        for(Iterator it=rooe.elementIterator();it.hasNext();){
                            Element element = (Element)it.next();
                            //......
                        }
                (6)在某节点下添加字节点
                        Element ageElm = newMemberElm.addElement("age");
                (7)设置节点文字
                        ageElm.setText("29");
                (8)删除某节点
                        parentElm.remove(childElm);        //childElm是待删除的节点,parentElm是其父节点
                (9)添加一个CDATA节点
                        Element contentElm = infoElm.addElement("content");
                        contentElm.addCDATA(diary.getContent());
                        contentElm.getText();            //特别说明:获取节点的CDATA值与获取节点的值是同一个方法
                        contentElm.clearContent();        //清除节点中的内容,CDATA亦可
        4.属性相关
                (1)取得某节点下的某属性
                        Element root = document.getRootElement();
                        Attribute attribute = root.attribute("size");    //属性名name
                (2)取得属性的文字
                        String text = attribute.getText();
                (3)遍历某节点的所有属性
                        Element root = document.getRootElement();
                        for(Iterator it = root.attributeIterator();it.hasNext;){
                            Attribute attribute = (Attribute)it.next();
                            String text = attribute.getText();
                            System.out.print(text);
                        }
              (4)设置某节点的属性和文字
                        newMemberElm.addAttribute("name","sitinspring");
                (5)设置属性的文字
                        Attribute attribute = root.attribute("name");
                        attribute.setText("sitinspring");
        5.使用DOM4J操作XML数据
                1.实现步骤
                    导入DOM4J的jar包
                    指定要解析的XML文件
                    把XML文件转换成Document对象
                    获取节点属性或文本的值
              2.使用DOM4j读取下面xml文档中所有的学生信息
                    student.xml
                       

 1           <?xml version="1.0" encoding="gb2312" ?>
 2                         <students>
 3                             <student age="25">  <!--如果没有age属性,默认值设置为20-->
 4                                 <name>崔卫兵</name>
 5                                 <college>PC学院</college>
 6                                 <telephone>62354666</telephone>
 7                                 <notes>男,1985年出生,硕士,现就读北京邮电大学</notes>
 8                             </student>
 9                             <student age="25">
10                                 <name>张宏哲</name>
11                                 <college leader="leader">PC学院</college>   <!--如果没有leader属性 默认为leader-->
12                                 <telephone>62354666</telephone>
13                                 <notes>男,1985年出生,硕士,现就读北京邮电大学</notes>
14                             </student>
15                         </students>


                    
                    Dom4jReadExmple.java
                       

 1             public class Dom4jReadExmple {
 2     
 3                             /**
 4                              * 遍历整个xml文件,获取所有节点的值与其属性的值,并放入HashMap中    
 5                              * @param filename  待遍历的XML文件(相对路径或者绝对路径)
 6                              * @param hm    存放遍历结果
 7                              */
 8                             public void iterateWholeXML(String filename,HashMap<String,String> hm){
 9                                 SAXReader saxReader = new SAXReader();
10                                 try {
11                                     Document document = saxReader.read(new File(filename));
12                                     Element root = document.getRootElement();
13                                     int num=-1;            //用于记录学生编号的变量
14                                     //遍历根元素(students)的所有子节点(肯定是Student节点)
15                                     for (Iterator iter = root.elementIterator(); iter.hasNext();) {
16                                         Element element = (Element) iter.next();
17                                         num++;
18                                         //获取person节点的age属性
19                                         Attribute ageAttr = element.attribute("age");
20                                         if(ageAttr != null){
21                                             String age = ageAttr.getValue();
22                                             if(age != null&&!age.equals("")){
23                                                 hm.put(element.getName()+"-"+ageAttr.getName()+num, age);
24                                             }else{
25                                                 hm.put(element.getName()+"-"+ageAttr.getName()+num, "20");
26                                             }
27                                         }else{
28                                             hm.put(element.getName()+"-age"+num, "20");
29                                         }
30                                         //遍历student节点的所有子节点(即name,college,telphone和notes)
31                                         for (Iterator iterInner=element.elementIterator(); iterInner.hasNext();) {
32                                             Element elementInner = (Element)iterInner.next();
33                                             if(elementInner.getName().equals("college")){
34                                                 hm.put(elementInner.getName()+num, elementInner.getText());
35                                                 //获取college节点的leader属性的值
36                                                 Attribute leaderAttr = elementInner.attribute("leader");
37                                                 if(leaderAttr != null){
38                                                     String leader = leaderAttr.getValue();
39                                                     if(leader != null&&!leader.equals("")){
40                                                         hm.put(elementInner.getName()+"-"+leaderAttr.getName()+num, leader);
41                                                     }else{
42                                                         hm.put(elementInner.getName()+"-"+leaderAttr.getName()+num, leader);
43                                                     }
44                                                 }else{
45                                                     hm.put(elementInner.getName()+"-leader"+num, "leader");
46                                                 }
47                                             }else{
48                                                 hm.put(elementInner.getName()+num, elementInner.getText());
49                                             }
50                                         }
51                                     }
52                                 } catch (Exception e) {
53                                     e.printStackTrace();
54                                 }
55                             }
56                         }


                    TestDom4jReadExmple.java    
                      

 1          public class TestDom4jReadExmple {
 2                             public static void main(String[] args) {
 3                                 try {
 4                                     //获取解析完成后的解析信息
 5                                     HashMap<String, String> hashMap;
 6                                     Dom4jReadExmple drb = new Dom4jReadExmple();
 7                                     //遍历整个XML文件
 8                                     hashMap= new HashMap<String, String>();
 9                                     String n = System.getProperty("user.dir");    //获取当前工程真实路径
10                                     //studentInfo.xml保存学生信息,放在src目录下
11                                     drb.iterateWholeXML(n+"\src\studentInfo.xml", hashMap);
12                                     for (int i = 0; i < hashMap.size(); i+=6) {
13                                         int j=i/6;
14                                         System.out.println(hashMap.get("name"+j)+"	");
15                                         System.out.println(hashMap.get("student-age"+j)+"	");
16                                         System.out.println(hashMap.get("college"+j)+"	");
17                                         System.out.println(hashMap.get("college-leader"+j)+"	");
18                                         System.out.println(hashMap.get("telephone"+j)+"	");
19                                         System.out.println(hashMap.get("notes"+j)+"	");
20                                     }
21                                 } catch (Exception e) {
22                                     e.printStackTrace();
23                                 }
24                             }
25                         }
作者:JamelAr
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/JamelAr/p/6507216.html