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包。

  • 相关阅读:
    loaded some nib but the view outlet was not set
    指标评比
    IOS DEVELOP FOR DUMMIES
    软件测试题二
    javascript select
    DOM节点类型详解
    mysql操作
    UVA 10055
    solutions for 'No Suitable Driver Found For Jdbc'
    解决git中文乱码问题
  • 原文地址:https://www.cnblogs.com/zqyanywn/p/5899331.html
Copyright © 2011-2022 走看看