使用DOM解析XML文檔

          ??????? 當使用DOM解析XML文檔時,使用的是DOM的思想,因而不可避免需要將XML文檔轉換成DOM樹。DOM解析器在裝入XML文檔時,已經在內存中將XML文檔的每個元素轉換成DOM樹的每個節點了。

          對于下面的一個簡單XML文檔:

          ???xml代碼:

          <? xml?version="1.0"?encoding="GB2312"?standalone="no" ?>
          < 書籍列表 >
          ????
          < 書籍?分類="計算機"?書名="XML 的今生今世"?書號 ="SN-123" >
          ????????
          < 價格 > 66.66 </ 價格 >
          ????????
          < 簡要介紹 >
          ????????????該書詳細描寫XML的從出生到衰老的整個過程
          ????????
          </ 簡要介紹 >
          ????????
          < 出版社 > spoto出版社 </ 出版社 >
          ????????
          < 主要內容 >
          ????????????
          < 章節?title ="前言" ?number ="0" />
          ????????????
          < 章節?title ="XML的歷史" ?number ="1" >
          ????????????????
          < 主題?name ="SGML,XML的前生" />
          ????????????????
          < 主題?name ="HTML與SGML" />
          ????????????????
          < 主題?name ="XML的應用領域" />
          ????????????
          </ 章節 >
          ????????????
          < 章節?title ="XML文檔規則" ?number ="2" >
          ????????????????
          < 主題?name ="元素" />
          ????????????????
          < 主題?name ="屬性" />
          ????????????????
          < 主題?name ="注釋" />
          ????????????
          </ 章節 >
          ????????
          </ 主要內容 >
          ????
          </ 書籍 >
          </ 書籍列表 >

          ???使用DOM解析該文檔的代碼如下:
          ???java 代碼:
          package?contentsParser;

          import?java.io.IOException;

          import?org.apache.xerces.parsers.DOMParser;
          import?org.w3c.dom.Attr;
          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;


          public?class?TestContensDOMParser?{

          ????
          /**
          ?????*?
          @param?args
          ?????
          */

          ????
          public?static?void?main(String[]?args)?{
          ????????TestContensDOMParser?tcdp?
          =?new?TestContensDOMParser();
          ????????tcdp.parseXMLFile(
          "contents.xml");
          ????}

          ????
          ????
          ????
          /*
          ?????*?解析文檔
          ?????
          */

          ????
          public?void?parseXMLFile(String?fileName)?{
          ????????
          try?{
          ????????????DOMParser?parser?
          =?new?DOMParser();
          ????????????parser.parse(fileName);????
          //????解析文件
          ????????????
          ????????????
          //????獲得文檔對象
          ????????????Document?doc?=?parser.getDocument();
          ????????????
          ????????????
          //????獲得根節點
          ????????????Element?root?=?doc.getDocumentElement();
          ????????????
          ????????????
          //?????得到所有書籍節點
          ????????????NodeList?bookList?=?root.getElementsByTagName("書籍");
          ????????????
          ????????????System.out.println(
          "XML文件開始解析..");
          ????????????
          ????????????
          for(int?i=0;i<bookList.getLength();i++)?{
          ????????????????
          //????獲得當前書籍元素
          ????????????????Element?book?=?(Element)?bookList.item(i);
          ????????????????System.out.println(
          "書籍:分類:"?+?book.getAttribute("分類")?+?"?;?"
          ????????????????????????
          +?"書名:"?+?book.getAttribute("書名")?+?"?;?"?+?"書號:"?+?book.getAttribute("書號")?);
          ????????????????
          ????????????????NodeList?priceList?
          =??book.getElementsByTagName("價格");
          ????????????????System.out.println(
          "價格:"
          ????????????????????????????
          +?priceList.item(0).getFirstChild().getNodeValue());
          ????????????????
          ????????????????NodeList?introList?
          =??book.getElementsByTagName("簡要介紹");
          ????????????????System.out.println(
          "簡要介紹:"
          ????????????????????????????
          +?introList.item(0).getFirstChild().getNodeValue());
          ????????????????
          ????????????????NodeList?publishList?
          =??book.getElementsByTagName("出版社");
          ????????????????System.out.println(
          "出版社:"
          ????????????????????????????
          +?publishList.item(0).getFirstChild().getNodeValue());
          ????????????????
          ????????????????NodeList?contentList?
          =??book.getElementsByTagName("主要內容");
          ????????????????System.out.println(
          "主要內容:");
          ????????????????
          ????????????????
          for(int?j=0;i<contentList.getLength();i++)?{
          ????????????????????
          //?獲得主要內容的元素
          ????????????????????Element?content?=?(Element)?contentList.item(0);
          ????????????????
          ????????????????????NodeList?zhangjieList?
          =?content.getElementsByTagName("章節");
          ????????????????????
          ????????????????????
          for(int?k=0;k<zhangjieList.getLength();k++)?{
          ????????????????????????
          //?章節屬性
          ????????????????????????Element?zhangjie?=?(Element)?zhangjieList.item(k);
          ????????????????????????System.out.print(
          "章節:??");
          ????????????????????????System.out.print(
          "title:"?+?zhangjie.getAttribute("title"));
          ????????????????????????System.out.print(
          ";");
          ????????????????????????System.out.print(
          "number:?"+zhangjie.getAttribute("number"));
          ????????????????????????System.out.println();
          ????????????????????????
          ????????????????????????
          //????章節內容????????????????????
          ????????????????????????NodeList?subjectList?=?zhangjie.getElementsByTagName("主題");
          ????????????????????????
          for(int?n=0;n<subjectList.getLength();n++)?{
          ????????????????????????????Element?subject?
          =?(Element)?subjectList.item(n);
          ????????????????????????????System.out.println(
          "主題:"?+?subject.getAttribute("name"));
          ????????????????????????}

          ????????????????????????
          ????????????????????}

          ????????????????}

          ????????????}

          ????????????System.out.println();
          ????????????System.out.println(
          "XML文件解析結束");
          ????????????
          ????????}
          ?catch?(SAXException?e)?{
          ????????????e.printStackTrace();
          ????????}
          ?catch?(IOException?e)?{
          ????????????e.printStackTrace();
          ????????}

          ????}

          ????

          }

          ?通過上面的代碼可以看出,DOM解析器處理XML文檔的方式類似于樹的遍歷。當我們在代碼中以遍歷樹的方式遍歷每個節點時,DOM解析器負責對應處理文檔中的每個元素。

          posted on 2008-09-28 11:03 nonels 閱讀(317) 評論(0)  編輯  收藏 所屬分類: J2EE

          <2008年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類(16)

          隨筆檔案(16)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 自治县| 灌阳县| 汶川县| 武宁县| 霍州市| 祁东县| 恩平市| 定日县| 洮南市| 横峰县| 井研县| 昂仁县| 曲松县| 博乐市| 论坛| 康乐县| 渝中区| 潼南县| 湟源县| 资中县| 浮梁县| 洞头县| 恭城| 德州市| 友谊县| 前郭尔| 鱼台县| 邢台市| 富宁县| 当涂县| 永登县| 漳州市| 蓬安县| 军事| 安义县| 竹山县| 绿春县| 牟定县| 赤城县| 武清区| 正镶白旗|