zoukankan      html  css  js  c++  java
  • dom4j学习总结(一)

    dom4j学习总结(一) 

    (一)创建Document的基本操作

    /**
      * xml基本操作
      */

     public void BaseOperation(){
      //创建一个document
      Document document=DocumentHelper.createDocument();
      //创建根结点
      Element root=document.addElement("root");
      //为根结点添加一个book节点
      Element book1=root.addElement("book");
      //为book1添加属性type
      book1.addAttribute("type","science");
      //为book1添加name子节点
      Element name1=book1.addElement("Name");
      //并设置其name为"Java"
      name1.setText("Java");
      //为book1创建一个price节点,并设其价格为100
      book1.addElement("price").setText("100");
      
      //为根结点添加第二个book节点,并设置该book节点的type属性
      Element book2=root.addElement("book").addAttribute("type","science");
      //为book1添加name子节点
      Element name2=book2.addElement("Name");
      //并设置其name为"Oracle"
      name2.setText("Oracle");
      //为book1创建一个price节点,并设其价格为200
      book2.addElement("price").setText("200");
      
      //输出xml
      System.out.println(document.asXML());
     }

    调用BaseOperation,输出结果为:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
     <book type="science">
      <Name>Java</Name>
      <price>100</price>
     </book>
     <book type="science">
      <Name>Oracle</Name>
      <price>200</price>
     </book>
    </root>

    (二)根据一个符合Document格式的字符串来生成一个Document

     /**将字符串转化为Document
      * @param str  输入的字符串
      * @return  生成的document
      * @throws DocumentException
      */

     public Document parserStrtoDocument(String str) throws DocumentException{
      Document document=DocumentHelper.parseText(str);
      return document;
     }

    调用示例:

    String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";

      Document document = parserStrtoDocument(str);
      System.out.println(document.asXML());

    输出结果为:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
     <book type="science">
      <Name>Java</Name>
      <price>100</price>
     </book>
    </root>

    (三)取得xml节点属性的基本方法

     /**
      * 取得xml的节点和属性的值
      * @throws DocumentException
      */

     public void getBaseInfofromDocument() throws DocumentException{
      String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
      //生成一个Document
      Document document = DocumentHelper.parseText(str);
      //取得根结点
      Element root=document.getRootElement();
      //取得book节点
      Element book=root.element("book");
      //取得book节点的type属性的值
      String type=book.attributeValue("type");
      //取得Name节点
      Element name=book.element("Name");
      //取得书名
      String bookname=name.getText();
      //取得书的价钱
      int price=Integer.parseInt(book.element("price").getText());
      
      //输出书目信息
      System.out.println("书名:"+bookname);
      System.out.println("所属类别:"+type);
      System.out.println("价格:"+price);
     }

    调用getBaseInfofromDocument,输出结果为:

    书名:Java
    所属类别:science
    价格:100

    (四)利用迭代,xpath取得节点及其属性值

     /**利用迭代,xpath取得xml的节点及其属性值
      * @throws DocumentException
      */

     public void getComplexInfofromDocument() throws DocumentException{


      String str="<root><book type='science'><Name>Java</Name><price>100</price></book>"
       +"<book type='science'><Name>Oracle</Name><price>120</price></book>"
       +"<book type='society'><Name>Society security</Name><price>130</price></book>"
       +"<author><name>chb</name></author></root>";
      //生成一个Document
      Document document = DocumentHelper.parseText(str);
      
      //提取类型为"society"的书
      //此处需要添加支持xpath的jar包,详细见备注
      Element society_book=(Element)document.selectSingleNode("/root/book[@type='society']");
      System.out.println(society_book.asXML());
      
      //提取价格节点的列表
      System.out.println("-----------价格列表-------------");
      List price=document.selectNodes("//price");
      for(int i=0;i<price.size();i++){
       Element elem_price=(Element)price.get(i);
       System.out.println(elem_price.getText());
      }
      
      //循环根结点下的所有节点,若当前节点为book,则输出这本书的详细信息
      System.out.println("-------------书目详情------------");
      System.out.println("书名/t/t类别/t/t价格");
      Element root=document.getRootElement();
      Iterator iterator=root.elementIterator();
      while(iterator.hasNext()){
       Element element=(Element)iterator.next();
       if(element.getName().equals("book")){
        System.out.print(element.element("Name").getText()+"/t");
        System.out.print(element.attributeValue("type")+"/t/t");
        System.out.print(element.element("price").getText()+"/n");
       }
      }

      //查找作者姓名
      Element author=(Element)document.selectSingleNode("//author");
      System.out.println("---------"+author.element("name").getText()+"----------");
      //提取作者的所有书目名称
      Iterator iterator_book=root.elementIterator("book");  
      while(iterator_book.hasNext()){
       Element book=(Element)iterator_book.next();
       System.out.print(book.element("Name").getText()+"/t");
      }
      
      //属性迭代
      System.out.println("/n-------属性迭代--------");
      String str1="<book type='science' name='Java' price='100'/>";
      Document document1=DocumentHelper.parseText(str1);
      //开始迭代
      Iterator iterator_attribute=document1.getRootElement().attributeIterator();
      while(iterator_attribute.hasNext()){
       //提取当前属性
       Attribute attribute=(Attribute)iterator_attribute.next();
       System.out.println(attribute.getName()+":"+attribute.getValue());
      }
     }

    调用getComplexInfofromDocument,输出结果为:

    <book type="society"><Name>Society security</Name><price>130</price></book>
    -----------价格列表-------------
    100
    120
    130
    -------------书目详情------------
    书名  类别  价格
    Java science  100
    Oracle science  120
    Society security society  130
    ---------chb----------
    Java Oracle Society security 
    -------属性迭代--------
    type:science
    name:Java
    price:100

    备注:调用该方法之前,应该先向工程中添加支持xpath的jar包,否则,会出现以下错误:

    java.lang.NoClassDefFoundError: org/jaxen/JaxenException
     at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
     at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
     at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
     at xml_chb.dom4j_chb.getComplexInfofromDocument(dom4j_chb.java:82)
     at xml_chb.dom4j_chb.main(dom4j_chb.java:92)
    Exception in thread "main"

    只需要引入jaxen包就行了,我使用的是hibernate包中的jaxen-1.1-beta-7.jar包。

  • 相关阅读:
    线程之Thread
    如何通过HTTP优雅调用第三方-Feign
    Spring AOP核心源码
    Spring-beans之BeanFactory初始化
    spring-core源码走读
    power of two
    排序算法(二)两种选择排序
    排序算法(一)四种冒泡排序
    约瑟夫问题
    我理解的CLH
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330294.html
Copyright © 2011-2022 走看看