<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    甜咖啡

    我的IT空間

    Java解析XML文檔(簡(jiǎn)單實(shí)例)——dom解析xml

    一、前言
      
      用Java解析XML文檔,最常用的有兩種方法:使用基于事件的XML簡(jiǎn)單API(Simple
    API for XML)稱為SAX和基于樹(shù)和節(jié)點(diǎn)的文檔對(duì)象模型(Document Object Module)稱為DOM。Sun公司提供了Java API
    for XML
    Parsing(JAXP)接口來(lái)使用SAX和DOM,通過(guò)JAXP,我們可以使用任何與JAXP兼容的XML解析器。
      
      JAXP接口包含了三個(gè)包:
      
      (1)org.w3c.dom W3C推薦的用于XML標(biāo)準(zhǔn)規(guī)劃文檔對(duì)象模型的接口。
      
      (2)org.xml.sax 
    用于對(duì)XML進(jìn)行語(yǔ)法分析的事件驅(qū)動(dòng)的XML簡(jiǎn)單API(SAX)
      
      (3)javax.xml.parsers解析器工廠工具,程序員獲得并配置特殊的特殊語(yǔ)法分析器。
      
      二、前提
      
      DOM編程不要其它的依賴包,因?yàn)镴DK里自帶的JDK里含有的上面提到的org.w3c.dom、org.xml.sax
    和javax.xml.parsers包就可以滿意條件了。
      
      三、使用DOM解析XML文檔
      
      我們現(xiàn)在來(lái)看看DOM是如何解析XML的吧!同樣的,我將從一個(gè)簡(jiǎn)單的不能再簡(jiǎn)單的例子來(lái)說(shuō)明DOM是如何解析XML文檔的,先讓我們看看XML是什么內(nèi)容吧:
      
      <?xml
    version="1.0"
    encoding="gb2312"?>
      
      <books>
      
      <book
    email="zhoujunhui">
      
      <name>rjzjh</name>
      
      <price>jjjjjj</price>
      
      </book>
      
      </books>
      
      簡(jiǎn)單的不能再簡(jiǎn)單了。但是該有的都有了,根元素、屬性、子節(jié)點(diǎn)。好了,能反應(yīng)問(wèn)題就行了,下面來(lái)看看解析這個(gè)XML文件的Java代碼吧!
      
      1
    public class DomParse {
      
      2   public
    DomParse(){
      
      3      DocumentBuilderFactory
    domfac=DocumentBuilderFactory.newInstance();
      
      4      try
    {
      
      5          DocumentBuilder
    dombuilder=domfac.newDocumentBuilder();
      
      6          InputStream is=new
    FileInputStream("bin/library.xml");
      
      7          Document
    doc=dombuilder.parse(is);
      
      8
      
      9          Element
    root=doc.getDocumentElement();
      
      10         NodeList
    books=root.getChildNodes();
      
      11         if(books!=null){
      
      12            
    for(int i=0;i<books.getLength();i++){
      
      13                Node
    book=books.item(i);
      
      14                if(book.getNodeType()==Node.ELEMENT_NODE){
      
      15         String
    email=book.getAttributes().getNamedItem("email").getNodeValue();
      
      16                   
    System.out.println(email);
      
      17         for(Node
    node=book.getFirstChild();node!=null;node=node.getNextSibling()){
      
      18                if(node.getNodeType()==Node.ELEMENT_NODE){
      
      19                    if(node.getNodeName().equals("name")){
      
      20                     String
    name=node.getNodeValue();
      
      21                    String
    name1=node.getFirstChild().getNodeValue();
      
      22                              System.out.println(name);
      
      23                              System.out.println(name1);
      
      24                          
    }
      
      25                   if(node.getNodeName().equals("price")){
      
      26                       String
    price=node.getFirstChild().getNodeValue();
      
      27                              System.out.println(price);
      
      28                          
    }
      
      29                       }
      
      30                   
    }
      
      31                }
      
      32            
    }
      
      33         }
      
      34      } catch
    (ParserConfigurationException e)
    {
      
      35         e.printStackTrace();
      
      36      } catch
    (FileNotFoundException e)
    {
      
      37         e.printStackTrace();
      
      38      } catch
    (SAXException e) {
      
      39         e.printStackTrace();
      
      40     
    } catch (IOException e)
    {
      
      41         e.printStackTrace();
      
      42     
    }
      
      43  }
      
      44  public static void main(String[] args)
    {
      
      45      new DomParse();
      
      46  }
      
      47
    }
      
      四、代碼解釋
      
      先看看這個(gè)程序引用類:
      
      import
    java.io.FileInputStream;
      
      import
    java.io.FileNotFoundException;
      
      import
    java.io.IOException;
      
      import java.io.InputStream;
      
      import
    javax.xml.parsers.DocumentBuilder;
      
      import
    javax.xml.parsers.DocumentBuilderFactory;
      
      import
    javax.xml.parsers.ParserConfigurationException;
      
      //下面主要是org.xml.sax包的類
      
      import
    org.w3c.dom.Document;
      
      import org.w3c.dom.Element;
      
      import
    org.w3c.dom.Node;
      
      import org.w3c.dom.NodeList;
      
      import
    org.xml.sax.SAXException;
      
      上面那么簡(jiǎn)單的代碼一看就明白了,但是為了介紹個(gè)DOM編程的大概還是來(lái)看看這個(gè)程序吧:
      
      (1)得到DOM解析器的工廠實(shí)例
      
      DocumentBuilderFactory
    domfac=DocumentBuilderFactory.newInstance();
      
      得到j(luò)avax.xml.parsers.DocumentBuilderFactory;類的實(shí)例就是我們要的解析器工廠
      
      (2)從DOM工廠獲得DOM解析器
      
      DocumentBuilder
    dombuilder=domfac.newDocumentBuilder();
      
      通過(guò)javax.xml.parsers.DocumentBuilderFactory實(shí)例的靜態(tài)方法newDocumentBuilder()得到DOM解析器
      
      (3)把要解析的XML文檔轉(zhuǎn)化為輸入流,以便DOM解析器解析它
      
      InputStream
    is=new
    FileInputStream("bin/library.xml");
      
      InputStream是一個(gè)接口。
      
      (4)解析XML文檔的輸入流,得到一個(gè)Document
      
      Document
    doc=dombuilder.parse(is);
      
      由XML文檔的輸入流得到一個(gè)org.w3c.dom.Document對(duì)象,以后的處理都是對(duì)Document對(duì)象進(jìn)行的
      
      (5)得到XML文檔的根節(jié)點(diǎn)
      
      Element
    root=doc.getDocumentElement();
      
      在DOM中只有根節(jié)點(diǎn)是一個(gè)org.w3c.dom.Element對(duì)象。
      
      (6)得到節(jié)點(diǎn)的子節(jié)點(diǎn)
      
      NodeList books=root.getChildNodes();
      
      for(int
    i=0;i<books.getLength();i++){
      
      Node
    book=books.item(i);
      
      }
      
      這是用一個(gè)org.w3c.dom.NodeList接口來(lái)存放它所有子節(jié)點(diǎn)的,還有一種輪循子節(jié)點(diǎn)的方法,后面有介紹
      
      (7)取得節(jié)點(diǎn)的屬性值
      
      String
    email=book.getAttributes().getNamedItem("email").getNodeValue();
      
      System.out.println(email);
      
      注意,節(jié)點(diǎn)的屬性也是它的子節(jié)點(diǎn)。它的節(jié)點(diǎn)類型也是Node.ELEMENT_NODE
      
      (8)輪循子節(jié)點(diǎn)
      
      for(Node
    node=book.getFirstChild();node!=null;node=node.getNextSibling()){
      
      if(node.getNodeType()==Node.ELEMENT_NODE){
      
      if(node.getNodeName().equals("name")){
      String
    name=node.getNodeValue();
      
      String
    name1=node.getFirstChild().getNodeValue();
      
      System.out.println(name);
      
      System.out.println(name1);
      
      }
      
      if(node.getNodeName().equals("price")){
      
      String
    price=node.getFirstChild().getNodeValue();
      
      System.out.println(price);
      }
      
      }
      
      這段代碼的打印輸出為:
      
      null
      
      alterrjzjh
      
      jjjjjj
      
      從上面可以看出
      
      String
    name=node.getNodeValue();  是一個(gè)空值。而
      
      String
    name1=node.getFirstChild().getNodeValue(); 才是真正的值,這是因?yàn)镈OM把<name>rjzjh</name>也當(dāng)作是兩層結(jié)構(gòu)的節(jié)點(diǎn),其父節(jié)點(diǎn)是<name>,子節(jié)點(diǎn)rjzjh才是我們真正想得到的。

    posted on 2011-07-19 09:57 甜咖啡 閱讀(1981) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    <2011年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    我參與的團(tuán)隊(duì)

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲av日韩aⅴ无码色老头| 福利片免费一区二区三区| 国产精品久久久久久久久久免费| 亚洲欧洲无码一区二区三区| 亚洲AV成人精品日韩一区18p| 国产无遮挡裸体免费视频在线观看 | 中文字幕亚洲男人的天堂网络| 国产一级特黄高清免费大片| 羞羞视频免费网站在线看| 亚洲理论片在线中文字幕| 午夜国产羞羞视频免费网站| 日本中文字幕免费高清视频| 亚洲国产综合AV在线观看| 日本亚洲国产一区二区三区| 久久久久国色AV免费看图片| 一级特黄录像免费播放肥| 亚洲国产精华液2020| 水蜜桃亚洲一二三四在线| 免费一级成人毛片| 亚洲一级免费毛片| 国产精品美女免费视频观看| 亚洲影视自拍揄拍愉拍| 亚洲人成色77777| 免费被黄网站在观看| 久久久久久久岛国免费播放 | 亚洲网站在线免费观看| 亚洲AV无码一区二区三区在线观看 | 国产免费黄色无码视频| 亚洲精品伊人久久久久| 亚洲AV无码一区二区乱孑伦AS | 免费又黄又爽的视频| 日韩不卡免费视频| 怡红院免费的全部视频| 日韩色日韩视频亚洲网站| 亚洲欧洲日产v特级毛片| 青青草原亚洲视频| 国产乱子伦片免费观看中字| 99无码人妻一区二区三区免费| 韩国免费A级毛片久久| 国产在亚洲线视频观看| 亚洲天堂男人影院|