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("http://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("http://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包。

          posted on 2006-09-24 02:10 揚州夢 閱讀(172) 評論(0)  編輯  收藏 所屬分類: java

          統計

          主站蜘蛛池模板: 正镶白旗| 禄劝| 平邑县| 博客| 晋宁县| 宝鸡市| 龙游县| 忻城县| 商水县| 河东区| 佛山市| 关岭| 安仁县| 吉隆县| 天水市| 稷山县| 长岛县| 拉萨市| 云浮市| 长宁县| 五指山市| 日喀则市| 鄯善县| 阜新市| 大石桥市| 蒲城县| 若尔盖县| 庆云县| 潞城市| 石渠县| 渑池县| 象山县| 普安县| 建宁县| 威宁| 克东县| 罗江县| 双城市| 恩平市| 泸水县| 东乡|