• 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
    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    iOS----------WKWebView修改userAgent
    Vmware路由配置
    【手机APP开发】指南
    【Git】git 指南
    【微信小程序开发】阮一峰老师的微信小程序开发入门教程——学起来~
    【vue】2-Keycode对照表
    【vue】1-vue简介与基础
    Meaning
    数据增强
    Dropout
  • 原文地址:https://www.cnblogs.com/JamelAr/p/6507216.html
Copyright © 2020-2023  润新知