使用DOM解析XML文檔

          ??????? 當使用DOM解析XML文檔時,使用的是DOM的思想,因而不可避免需要將XML文檔轉(zhuǎn)換成DOM樹。DOM解析器在裝入XML文檔時,已經(jīng)在內(nèi)存中將XML文檔的每個元素轉(zhuǎn)換成DOM樹的每個節(jié)點了。

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

          ???xml代碼:

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

          ???使用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();
          ????????????
          ????????????
          //????獲得根節(jié)點
          ????????????Element?root?=?doc.getDocumentElement();
          ????????????
          ????????????
          //?????得到所有書籍節(jié)點
          ????????????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("主要內(nèi)容");
          ????????????????System.out.println(
          "主要內(nèi)容:");
          ????????????????
          ????????????????
          for(int?j=0;i<contentList.getLength();i++)?{
          ????????????????????
          //?獲得主要內(nèi)容的元素
          ????????????????????Element?content?=?(Element)?contentList.item(0);
          ????????????????
          ????????????????????NodeList?zhangjieList?
          =?content.getElementsByTagName("章節(jié)");
          ????????????????????
          ????????????????????
          for(int?k=0;k<zhangjieList.getLength();k++)?{
          ????????????????????????
          //?章節(jié)屬性
          ????????????????????????Element?zhangjie?=?(Element)?zhangjieList.item(k);
          ????????????????????????System.out.print(
          "章節(jié):??");
          ????????????????????????System.out.print(
          "title:"?+?zhangjie.getAttribute("title"));
          ????????????????????????System.out.print(
          ";");
          ????????????????????????System.out.print(
          "number:?"+zhangjie.getAttribute("number"));
          ????????????????????????System.out.println();
          ????????????????????????
          ????????????????????????
          //????章節(jié)內(nèi)容????????????????????
          ????????????????????????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文件解析結(jié)束");
          ????????????
          ????????}
          ?catch?(SAXException?e)?{
          ????????????e.printStackTrace();
          ????????}
          ?catch?(IOException?e)?{
          ????????????e.printStackTrace();
          ????????}

          ????}

          ????

          }

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

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

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

          導航

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆分類(16)

          隨筆檔案(16)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 海原县| 双桥区| 突泉县| 青龙| 仁寿县| 塘沽区| 南丰县| 沾化县| 车致| 博野县| 梁山县| 鄂托克前旗| 靖宇县| 金寨县| 长兴县| 明溪县| 晋中市| 潼关县| 同德县| 扶风县| 尼木县| 五华县| 新干县| 故城县| 弥勒县| 大关县| 泗阳县| 夏河县| 阿鲁科尔沁旗| 鄂托克前旗| 黑水县| 响水县| 防城港市| 弋阳县| 从化市| 正安县| 时尚| 报价| 宜兰县| 延安市| 班戈县|