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

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

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

    lexy

    支持開源,尊重他人的勞動!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      17 隨筆 :: 0 文章 :: 9 評論 :: 0 Trackbacks

    一、前言  
      用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>
    public void useDomParseXml() {
            DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();        
            try {
                DocumentBuilder dombuilder=domfac.newDocumentBuilder();
                InputStream is = new FileInputStream("bin/library.xml");
                Document doc = dombuilder.parse(is);            
                Element root=doc.getDocumentElement();
                NodeList books=root.getChildNodes();            
                if (books != null) {
                    for (int i = 0; i < books.getLength(); i++) {
                        Node book = books.item(i);
                        if (book.getNodeType() == Node.ELEMENT_NODE) {
                            String email = book.getAttributes().getNamedItem(
                                    "email").getNodeValue();                        
                            System.out.println(email);                        
                            for (Node node = book.getFirstChild(); node != null;
                                             node = node.getNextSibling()) {
                                if(node.getNodeType()==Node.ELEMENT_NODE){
                                    if (node.getNodeName().equals("name")) {
                                        String name = node.getFirstChild().
                                                getNodeValue();
                                        System.out.println(name);
                                    }                                
                                    if (node.getNodeName().equals("price")) {
                                        String price = node.getFirstChild().
                                                getNodeValue();
                                        System.out.println(price);
                                    }
                                }
                            }
                        }
                    }
                }
            } catch (Exception e) {            
            }
        }

    (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>也當作是兩層結構的節點.
    原文 :http://www.cnblogs.com/Steveson/archive/2007/06/04/770653.html

    posted on 2007-10-26 15:18 lexy 閱讀(2807) 評論(1)  編輯  收藏

    評論

    # re: Java解析XML文檔——dom解析xml (轉載) 2008-01-29 10:23 文喜
    新哥,這個不錯!又學到不少東西!  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: aaa毛片免费观看| 51午夜精品免费视频| 99久久久国产精品免费牛牛四川| 亚洲综合区小说区激情区| 美景之屋4在线未删减免费| 永久免费看bbb| 老妇激情毛片免费| 免费又黄又爽的视频| 一边摸一边桶一边脱免费视频| 亚洲国产精品日韩| www一区二区www免费| 亚洲欧洲∨国产一区二区三区| 免费日本一区二区| 亚洲精品国产成人| 欧洲精品成人免费视频在线观看 | a级片免费在线观看| 国产亚洲一区二区在线观看| 13小箩利洗澡无码视频网站免费| 婷婷亚洲久悠悠色悠在线播放| 99免费视频观看| 国产亚洲中文日本不卡二区| 国产jizzjizz免费视频| 久久久WWW成人免费精品| 亚洲av永久无码精品网站| 亚洲性线免费观看视频成熟| 亚洲av色香蕉一区二区三区蜜桃| 亚洲人成网站在线观看青青| 美女视频黄的免费视频网页| 亚洲国产精品日韩在线| 日本免费一区二区三区最新vr| 精品一区二区三区高清免费观看 | 免费看搞黄视频网站| 亚洲婷婷天堂在线综合| 日日操夜夜操免费视频| 精品无码一级毛片免费视频观看| 亚洲欧洲国产视频| 国产免费黄色大片| 久9这里精品免费视频| 午夜亚洲国产理论片二级港台二级| 亚洲一区爱区精品无码| 真人做人试看60分钟免费视频|