• Dom4J解析技术


        前面的话 


       本文主要讲解有关Dom4j技术和xpath配合下的优化!

        目录:

       为什么需要Dom4J

       DOM4J怎么用

       xpath怎么配合DOM4J 


          一  为什么需要Dom4J

                    一门技术出现必定是有原因的,一来是解决某方面技术问题,再者可能是优化性能。

                 xmlDom 简单方便,可以将xml文档以"DOM树"的形式装进内存,节点对象操作元素。但xml数据量较大时,消耗内存也大。sax访问元素方便,不能对元素crud。都是有明显缺点的。

                Dom4j的出现,正好优化了xml解析。

                   Dom4j和xmlDom 从操作上看很相似,可以说只是对应的API不一样。

                值得注意的是:

                DOM4J不是sun公司自己的产品,所以没有提供服务的jar包,我们可以自己下载DOM4J-API包,里面有API(index-html),jar包等。

        


         

          二   DOM4J怎么用

                 准备好示例xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <class> 
     4   <stu id="SP001"> 
     5     <name>小刘</name>  
     6     <age>12</age>  
     7     <Math>100</Math>  
     8     <English>90</English> 
     9   </stu>  
    10   <stu id="sp002"> 
    11     <name>小明</name>  
    12     <age>12</age>  
    13     <Math>98</Math>  
    14     <English>90</English> 
    15   </stu> 
    16    <stu id="sp003"> 
    17     <name>小张</name>  
    18     <age>12</age>  
    19     <Math>83</Math>  
    20     <English>91</English> 
    21   </stu> 
    22 </class>

     (1)访问元素

     Element e= document.getRootElement().Element('stu');
     Element nameNode= (Element) e.elements("name").get(0); //等价于e.Element('name'); 
    System.out.println( nameNode.getText());//小明

     (2)插入元素

     Element stuEle=DocumentHelper.createElement("stu"); 
     stuEle.addAttribute("id", "sp003"); //添加属性(id)  
     Element nameEle=DocumentHelper.createElement("name");
     nameEle.setText("宋江");
     Element ageEle=DocumentHelper.createElement("age");
     ageEle.setText("11");
     Element MathEle=DocumentHelper.createElement("Math");
     MathEle.setText("100");
    //将元素挂到stu上
    stuEle.add(nameEle);
    stuEle.add(ageEle);
    stuEle.add(MathEle);
    //刷新,这很重要。

     (3)修改

     (4)删除

        FIND:访问属性时: node.Elements('NodeName');  里面的元素只能是node的直接子节点,不可以是孙子(包括以后)。也不能根据id,name属性来访问元素。

         那么为提高查询效率,需要借助xpath;

     


    三:xpath怎么配合DOM4J 

      (1)什么是xpath

        xpath操作xml有点像sql语言查询数据库的效果,简单的说,xpath是一种查询格式。

       示例xml

    <?xml version="1.0" encoding="UTF-8"?>
    <AAA>
        <BBB id="sp001">B1</BBB>
        <BBB id="sp002" name="Bbb">
            <CCC>C1</CCC>
            <AAA>
                <BBB>B2</BBB>
            </AAA>
            <BBB>B3</BBB>
        </BBB>
        
    </AAA>
    

      看下面xpath配合DOM4j------注意xpath不单独使用

            List list=doc.selectNodes("/AAA/BBB");    //  "/AAA/BBB"就是xpath格式
         	System.out.println(list.size()); //2;
             
          	 //(1)xpath最经典的用法一
          	  	Element list1= (Element)doc.selectSingleNode("/AAA/BBB[1]");
    		// 拿到属性和Text
    	          System.out.println("id||"+list1.attributeValue("id"));
                    System.out.println("TextContent||"+list1.getText());
    
    
             // (2)经典用法二
          	 //通过id,name属性选出元素,相等于getElementById("ID");getElementsByTagName()
    	  //取出id=‘sp001’的BBB元素;
          	  Element node= (Element)(doc.selectNodes("//BBB[@id='sp001']").get(0));
          	  System.out.println(node.getText()); //B1;
          	  //取出name属性为"Bbb"的BBB元素
          	  Element n= (Element) doc.selectSingleNode("//BBB[@name='Bbb'][1]");
          	  System.out.println(n.attributeCount()); //2 
          	
    

      

        xpath细节:

        (1) "/AAA/BBB"-----AAA下的BBB集合(只是子节点), /有点路径的意思。

           再者:"/AAA/BBB[1]"----就是具体指第1个BBB元素(这里的1不是index=0开始的,就是实际上的1).

        (2) "//AAA"-----指的是xml中全部AAA元素;

            比如:"//AAA/BBB"---父元素是AAA的全部BBB元素集合(List)

        (3) "//BBB[@id='sp001']"-----取出id=‘sp001’的BBB元素集合(List)

             "//BBB[@name="Bbb"]"-----取出name="Bbb"的元素集合(List)

             "//BBB[@id='sp001'][1]''----取出第1个元素

        find:  通过xpath的修饰,DOM4J的查询功能就很强大了。适用于大多数情况,一般解析xml文档都是使用它。

      

       

         

     

        

       

        

  • 相关阅读:
    Windows 8将替换Win32 API
    密码强度检测:passwordStrength
    整数溢出与程序安全
    编程经验谈:如何正确使用内存
    C/C++指针学习的两个经典实例
    VC调试入门
    一些电子书籍的网站
    BMP文件格式分析(zz)
    C/C++ 跨平台I/O操作技巧
    Windows下C语言网络编程快速入门
  • 原文地址:https://www.cnblogs.com/huang-1995/p/5862670.html
Copyright © 2020-2023  润新知