dom4j學(xué)習(xí)總結(jié)(一)?

          (一)創(chuàng)建Document的基本操作

          /**
          ? * xml基本操作
          ? */

          ?public void BaseOperation(){
          ??//創(chuàng)建一個(gè)document
          ??Document document=DocumentHelper.createDocument();
          ??//創(chuàng)建根結(jié)點(diǎn)
          ??Element root=document.addElement("root");
          ??//為根結(jié)點(diǎn)添加一個(gè)book節(jié)點(diǎn)
          ??Element book1=root.addElement("book");
          ??//為book1添加屬性type
          ??book1.addAttribute("type","science");
          ??//為book1添加name子節(jié)點(diǎn)
          ??Element name1=book1.addElement("Name");
          ??//并設(shè)置其name為"Java"
          ??name1.setText("Java");
          ??//為book1創(chuàng)建一個(gè)price節(jié)點(diǎn),并設(shè)其價(jià)格為100
          ??book1.addElement("price").setText("100");
          ??
          ??//為根結(jié)點(diǎn)添加第二個(gè)book節(jié)點(diǎn),并設(shè)置該book節(jié)點(diǎn)的type屬性
          ??Element book2=root.addElement("book").addAttribute("type","science");
          ??//為book1添加name子節(jié)點(diǎn)
          ??Element name2=book2.addElement("Name");
          ??//并設(shè)置其name為"Oracle"
          ??name2.setText("Oracle");
          ??//為book1創(chuàng)建一個(gè)price節(jié)點(diǎn),并設(shè)其價(jià)格為200
          ??book2.addElement("price").setText("200");
          ??
          ??//輸出xml
          ??System.out.println(document.asXML());
          ?}

          調(diào)用BaseOperation,輸出結(jié)果為:

          <?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>

          (二)根據(jù)一個(gè)符合Document格式的字符串來生成一個(gè)Document

          ?/**將字符串轉(zhuǎn)化為Document
          ? * @param str? 輸入的字符串
          ? * @return? 生成的document
          ? * @throws DocumentException
          ? */

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

          調(diào)用示例:

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

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

          輸出結(jié)果為:

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

          (三)取得xml節(jié)點(diǎn)屬性的基本方法

          ?/**
          ? * 取得xml的節(jié)點(diǎn)和屬性的值
          ? * @throws DocumentException
          ? */

          ?public void getBaseInfofromDocument() throws DocumentException{
          ??String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
          ??//生成一個(gè)Document
          ??Document document = DocumentHelper.parseText(str);
          ??//取得根結(jié)點(diǎn)
          ??Element root=document.getRootElement();
          ??//取得book節(jié)點(diǎn)
          ??Element book=root.element("book");
          ??//取得book節(jié)點(diǎn)的type屬性的值
          ??String type=book.attributeValue("type");
          ??//取得Name節(jié)點(diǎn)
          ??Element name=book.element("Name");
          ??//取得書名
          ??String bookname=name.getText();
          ??//取得書的價(jià)錢
          ??int price=Integer.parseInt(book.element("price").getText());
          ??
          ??//輸出書目信息
          ??System.out.println("書名:"+bookname);
          ??System.out.println("所屬類別:"+type);
          ??System.out.println("價(jià)格:"+price);
          ?}

          調(diào)用getBaseInfofromDocument,輸出結(jié)果為:

          書名:Java
          所屬類別:science
          價(jià)格:100

          (四)利用迭代,xpath取得節(jié)點(diǎn)及其屬性值

          ?/**利用迭代,xpath取得xml的節(jié)點(diǎn)及其屬性值
          ? * @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>";
          ??//生成一個(gè)Document
          ??Document document = DocumentHelper.parseText(str);
          ??
          ??//提取類型為"society"的書
          ??//此處需要添加支持xpath的jar包,詳細(xì)見備注
          ??Element society_book=(Element)document.selectSingleNode("/root/book[@type='society']");
          ??System.out.println(society_book.asXML());
          ??
          ??//提取價(jià)格節(jié)點(diǎn)的列表
          ??System.out.println("-----------價(jià)格列表-------------");
          ??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());
          ??}
          ??
          ??//循環(huán)根結(jié)點(diǎn)下的所有節(jié)點(diǎn),若當(dāng)前節(jié)點(diǎn)為book,則輸出這本書的詳細(xì)信息
          ??System.out.println("-------------書目詳情------------");
          ??System.out.println("書名\t\t類別\t\t價(jià)格");
          ??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()){
          ???//提取當(dāng)前屬性
          ???Attribute attribute=(Attribute)iterator_attribute.next();
          ???System.out.println(attribute.getName()+":"+attribute.getValue());
          ??}
          ?}

          調(diào)用getComplexInfofromDocument,輸出結(jié)果為:

          <book type="society"><Name>Society security</Name><price>130</price></book>
          -----------價(jià)格列表-------------
          100
          120
          130
          -------------書目詳情------------
          書名??類別??價(jià)格
          Java?science??100
          Oracle?science??120
          Society security?society??130
          ---------chb----------
          Java?Oracle?Society security?
          -------屬性迭代--------
          type:science
          name:Java
          price:100

          備注:調(diào)用該方法之前,應(yīng)該先向工程中添加支持xpath的jar包,否則,會(huì)出現(xiàn)以下錯(cuò)誤:

          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 揚(yáng)州夢(mèng) 閱讀(173) 評(píng)論(0)  編輯  收藏 所屬分類: java

          統(tǒng)計(jì)

          主站蜘蛛池模板: 长葛市| 祥云县| 行唐县| 津市市| 宝应县| 循化| 青河县| 云梦县| 台湾省| 张北县| 滕州市| 班玛县| 阿拉善右旗| 聂拉木县| 金门县| 镇江市| 峡江县| 固阳县| 孟连| 毕节市| 台江县| 祁阳县| 茂名市| 二连浩特市| 克山县| 吴江市| 出国| 苍山县| 平阳县| 志丹县| 正阳县| 辛集市| 揭东县| 和静县| 安福县| 徐闻县| 马关县| 延长县| 礼泉县| 深州市| 太谷县|