Chinese To English     英文 轉(zhuǎn) 中文             
                   
          隨筆-27  評(píng)論-53  文章-0  trackbacks-0
          1、XML文件persons.xml內(nèi)容如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <persons>
            
          <person><name>jak</name><sex></sex></person>
            
          <person>
              
          <name>jcy</name>
              
          <sex></sex>
            
          </person>
          </persons>

          2、java解析代碼如下:

           1 package net.vicp.jiasoft;
           2 
           3 import javax.xml.parsers.*;
           4 import java.io.IOException;
           5 import org.xml.sax.SAXException;
           6 import org.w3c.dom.Document;
           7 import org.w3c.dom.NodeList;
           8 import org.w3c.dom.Node;
           9 
          10 /**
          11  * <p>Title: Dom解析XML示例</p>
          12  *
          13  * <p>Description: Dom解析XML</p>
          14  *
          15  * <p>Copyright: Copyright (c) 2008</p>
          16  *
          17  * <p>Company: Jiasoft</p>
          18  *
          19  * @author Jak.Shen
          20  * @version 1.0
          21  */
          22 public class DomXml {
          23     public void parsersXml() {
          24         //實(shí)例化一個(gè)文檔構(gòu)建器工廠
          25         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          26         try {
          27             //通過(guò)文檔構(gòu)建器工廠獲取一個(gè)文檔構(gòu)建器
          28             DocumentBuilder db = dbf.newDocumentBuilder();
          29             //通過(guò)文檔通過(guò)文檔構(gòu)建器構(gòu)建一個(gè)文檔實(shí)例
          30             Document doc = db.parse("persons.xml");
          31             //獲取所有名字為 “person” 的節(jié)點(diǎn)
          32             NodeList nl1 = doc.getElementsByTagName("person");
          33             int size1 = nl1.getLength();
          34             for (int i = 0; i < size1; i++) {
          35                 Node n = nl1.item(i);
          36                 //獲取 n 節(jié)點(diǎn)下所有的子節(jié)點(diǎn)。此處值得注意,在DOM解析時(shí)會(huì)將所有回車都視為 n 節(jié)點(diǎn)的子節(jié)點(diǎn)。
          37                 NodeList nl2 = n.getChildNodes();
          38                 //因?yàn)樯厦娴脑颍诖死械谝粋€(gè) n 節(jié)點(diǎn)有 2 個(gè)子節(jié)點(diǎn),而第二個(gè) n 節(jié)點(diǎn)則有 5 個(gè)子節(jié)點(diǎn)(因?yàn)槎嗔?個(gè)回車)。
          39                 int size2 = nl2.getLength();
          40                 for (int j = 0; j < size2; j++) {
          41                     Node n2 = nl2.item(j);
          42                     //還是因?yàn)樯厦娴脑颍蚀艘幣袛喈?dāng) n2 節(jié)點(diǎn)有子節(jié)點(diǎn)的時(shí)才輸出。
          43                     if (n2.hasChildNodes()) {
          44                         System.out.println(n2.getNodeName() + " = " +
          45                                            n2.getFirstChild().getNodeValue());
          46                     }
          47                 }
          48             }
          49         } catch (ParserConfigurationException ex) {
          50             ex.printStackTrace();
          51         } catch (IOException ex) {
          52             ex.printStackTrace();
          53         } catch (SAXException ex) {
          54             ex.printStackTrace();
          55         }
          56     }
          57 
          58     public static void main(String[] args) {
          59         DomXml domxml = new DomXml();
          60         domxml.parsersXml();
          61     }
          62 }




          杰森 
          郵箱:json.shen(at)gmail.com
          網(wǎng)站:www.shenjia.org
          posted on 2008-05-24 15:42 杰森 閱讀(13424) 評(píng)論(11)  編輯  收藏 所屬分類: JavaSE

          評(píng)論:
          # re: Java Dom解析XML 2008-05-27 10:12 | JAVA_START
          嘿嘿!  回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML[未登錄](méi) 2008-08-08 15:55 | Scott.H
          <person id="1">
          </person>

          這里的id應(yīng)該怎么得到呢  回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML 2008-08-10 12:46 | Jak.Shen
          @Scott.H

          你說(shuō)的id是person節(jié)點(diǎn)的屬性,屬性不是子節(jié)點(diǎn),所以獲取上面所寫(xiě)的nl1的屬性id即可。
          nl1.getAttributes();  回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML 2008-11-12 15:31 | 慕娉婷
          謝謝你!  回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML 2008-11-12 16:58 | Huaxu's
          @慕娉婷
          不用客氣!
            回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML 2011-06-22 09:48 | 李瀟
          謝了,這兩天一直糾結(jié)那個(gè)java dom解析xml為什么子節(jié)點(diǎn)數(shù)總是不對(duì),總是多幾個(gè),現(xiàn)在明白了,是把回車當(dāng)子節(jié)點(diǎn)了,還需要多一層判斷。謝謝你的文章  回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML 2011-12-20 14:02 | dellheng
          多謝博主提醒:此處值得注意,在DOM解析時(shí)會(huì)將所有回車都視為 n 節(jié)點(diǎn)的子節(jié)點(diǎn)。
          我試用了以下幾種判斷
          if(childNode.hasChildNodes()) 有子節(jié)點(diǎn)或TextContent才行
          if(childNode.hasAttributes()) 有屬性才行
          if(childNode.getNodeName().equals("part")) 必須使用節(jié)點(diǎn)名稱
          這個(gè)最好 是判斷類型的
          if(childNode.getNodeType()==Node.ELEMENT_NODE)
          希望對(duì)大家有幫助  回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML[未登錄](méi) 2012-05-22 19:37 | java
          怎么換個(gè)XML文件該程序就解析不了了啊  回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML[未登錄](méi) 2012-06-03 16:19 | hello
          以前寫(xiě)js的時(shí)候就郁悶了很久很久。。。@李瀟
            回復(fù)  更多評(píng)論
            
          # re: Java Dom解析XML 2012-07-16 15:26 | http://www.legow.cn/
          # re: Java Dom解析XML[未登錄](méi) 2014-07-07 17:13 | howard
          怎么獲取name對(duì)應(yīng)的內(nèi)容是什么呢  回復(fù)  更多評(píng)論
            
          嗨117
          主站蜘蛛池模板: 栾川县| 甘泉县| 五峰| 阿拉善盟| 潍坊市| 黔东| 紫云| 太原市| 涡阳县| 鱼台县| 兴义市| 昔阳县| 阜城县| 白河县| 万源市| 连江县| 唐山市| 金沙县| 双峰县| 商都县| 共和县| 石首市| 航空| 余庆县| 秀山| 湛江市| 兴和县| 萝北县| 峨眉山市| 阿巴嘎旗| 湖南省| 南江县| 平武县| 广河县| 二手房| 新晃| 皋兰县| 江陵县| 获嘉县| 松阳县| 岱山县|