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

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

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

    甜咖啡

    我的IT空間

    Java解析XML文檔(簡單實例)——dom解析xml

    一、前言
      
      用Java解析XML文檔,最常用的有兩種方法:使用基于事件的XML簡單API(Simple
    API for XML)稱為SAX和基于樹和節點的文檔對象模型(Document Object Module)稱為DOM。Sun公司提供了Java API
    for XML
    Parsing(JAXP)接口來使用SAX和DOM,通過JAXP,我們可以使用任何與JAXP兼容的XML解析器。
      
      JAXP接口包含了三個包:
      
      (1)org.w3c.dom W3C推薦的用于XML標準規劃文檔對象模型的接口。
      
      (2)org.xml.sax 
    用于對XML進行語法分析的事件驅動的XML簡單API(SAX)
      
      (3)javax.xml.parsers解析器工廠工具,程序員獲得并配置特殊的特殊語法分析器。
      
      二、前提
      
      DOM編程不要其它的依賴包,因為JDK里自帶的JDK里含有的上面提到的org.w3c.dom、org.xml.sax
    和javax.xml.parsers包就可以滿意條件了。
      
      三、使用DOM解析XML文檔
      
      我們現在來看看DOM是如何解析XML的吧!同樣的,我將從一個簡單的不能再簡單的例子來說明DOM是如何解析XML文檔的,先讓我們看看XML是什么內容吧:
      
      <?xml
    version="1.0"
    encoding="gb2312"?>
      
      <books>
      
      <book
    email="zhoujunhui">
      
      <name>rjzjh</name>
      
      <price>jjjjjj</price>
      
      </book>
      
      </books>
      
      簡單的不能再簡單了。但是該有的都有了,根元素、屬性、子節點。好了,能反應問題就行了,下面來看看解析這個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
    }
      
      四、代碼解釋
      
      先看看這個程序引用類:
      
      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;
      
      上面那么簡單的代碼一看就明白了,但是為了介紹個DOM編程的大概還是來看看這個程序吧:
      
      (1)得到DOM解析器的工廠實例
      
      DocumentBuilderFactory
    domfac=DocumentBuilderFactory.newInstance();
      
      得到javax.xml.parsers.DocumentBuilderFactory;類的實例就是我們要的解析器工廠
      
      (2)從DOM工廠獲得DOM解析器
      
      DocumentBuilder
    dombuilder=domfac.newDocumentBuilder();
      
      通過javax.xml.parsers.DocumentBuilderFactory實例的靜態方法newDocumentBuilder()得到DOM解析器
      
      (3)把要解析的XML文檔轉化為輸入流,以便DOM解析器解析它
      
      InputStream
    is=new
    FileInputStream("bin/library.xml");
      
      InputStream是一個接口。
      
      (4)解析XML文檔的輸入流,得到一個Document
      
      Document
    doc=dombuilder.parse(is);
      
      由XML文檔的輸入流得到一個org.w3c.dom.Document對象,以后的處理都是對Document對象進行的
      
      (5)得到XML文檔的根節點
      
      Element
    root=doc.getDocumentElement();
      
      在DOM中只有根節點是一個org.w3c.dom.Element對象。
      
      (6)得到節點的子節點
      
      NodeList books=root.getChildNodes();
      
      for(int
    i=0;i<books.getLength();i++){
      
      Node
    book=books.item(i);
      
      }
      
      這是用一個org.w3c.dom.NodeList接口來存放它所有子節點的,還有一種輪循子節點的方法,后面有介紹
      
      (7)取得節點的屬性值
      
      String
    email=book.getAttributes().getNamedItem("email").getNodeValue();
      
      System.out.println(email);
      
      注意,節點的屬性也是它的子節點。它的節點類型也是Node.ELEMENT_NODE
      
      (8)輪循子節點
      
      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();  是一個空值。而
      
      String
    name1=node.getFirstChild().getNodeValue(); 才是真正的值,這是因為DOM把<name>rjzjh</name>也當作是兩層結構的節點,其父節點是<name>,子節點rjzjh才是我們真正想得到的。

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


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

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

    統計

    常用鏈接

    留言簿(1)

    我參與的團隊

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲午夜福利AV一区二区无码| 国产大片91精品免费看3| 亚洲日韩aⅴ在线视频| 两性色午夜视频免费播放| 国产亚洲精aa成人网站| www成人免费视频| 亚洲熟妇丰满多毛XXXX| a级在线免费观看| 亚洲午夜精品一区二区| 国产曰批免费视频播放免费s| 亚洲免费福利在线视频| 国产成人无码a区在线观看视频免费| 亚洲精品国产第一综合99久久| 少妇亚洲免费精品| 最近免费字幕中文大全| 久久久久久亚洲Av无码精品专口| 国产成人精品免费视频大| 亚洲欧美熟妇综合久久久久| 日本一线a视频免费观看| 一级全免费视频播放| 久久91亚洲精品中文字幕| 免费精品国产自产拍在| 成人精品国产亚洲欧洲| 亚洲处破女AV日韩精品| 99在线视频免费观看视频| 国产精品亚洲色图| 国产亚洲一区二区三区在线观看| 国产成人免费午夜在线观看 | 亚洲s色大片在线观看| 91大神免费观看| 大桥未久亚洲无av码在线| 久久精品国产亚洲网站| 97无码免费人妻超级碰碰夜夜| 西西人体大胆免费视频| 亚洲另类激情综合偷自拍| 四虎影院免费视频| 日本人成在线视频免费播放| 亚洲日韩国产一区二区三区在线 | 国产精品亚洲精品爽爽| 久久久亚洲欧洲日产国码农村| 成年性生交大片免费看|