JAXP解析XML

          1準(zhǔn)備解析的xml文件
          ??????parseXML.xml
          ??????
          <?xml?version="1.0"?encoding="UTF-8"?>
          <states>
          ????
          <north>
          ????????
          <state>Minnesota</state>
          ????????
          <state>Iowa</state>
          ????????
          <state>North?Dakota</state>
          ????
          </north>
          ????
          <south>
          ????????
          <state>Texas</state>
          ????????
          <state>Oklahoma</state>
          ????????
          <state>Louisiana</state>
          ????
          </south>
          ????
          <east>
          ????????
          <state>New?York</state>
          ????????
          <state>North?Carolina</state>
          ????????
          <state>Massachusetts</state>
          ????
          </east>
          ????
          <west>
          ????????
          <state>California</state>
          ????????
          <state>Oregon</state>
          ????????
          <state>Nevada</state>
          ????
          </west>
          </states>
          2、解析文件
          ??????DomToXml.java
          ??????
          package?dom.test;
          import?java.io.*;

          import?javax.xml.parsers.DocumentBuilder;
          import?javax.xml.parsers.DocumentBuilderFactory;
          import?javax.xml.parsers.ParserConfigurationException;
          import?javax.xml.transform.Transformer;
          import?javax.xml.transform.TransformerConfigurationException;
          import?javax.xml.transform.TransformerException;
          import?javax.xml.transform.TransformerFactory;
          import?javax.xml.transform.dom.DOMSource;
          import?javax.xml.transform.stream.StreamResult;
          import?org.w3c.dom.Document;
          import?org.w3c.dom.Element;
          import?org.w3c.dom.Node;
          import?org.w3c.dom.NodeList;
          import?org.w3c.dom.Text;
          import?org.xml.sax.SAXException;


          /**
          ?*?
          @author?windfree
          ?*
          ?
          */
          ?
          //JAXP是java?API?for?XML?processing,幾用于處理xml文檔的java語(yǔ)言編程接口。
          ?
          //JAXP支持DOM、XSLT、SAX等標(biāo)準(zhǔn)?
          ?
          public?class?DomToXml?{
          ????
          public?static?DocumentBuilderFactory?factory;
          ????
          public?static?DocumentBuilder?parser;
          ????
          public?static?Document?document;
          ????
          public?static?TransformerFactory?transformerFactory;
          ????
          public?static?Transformer?transform;
          ????
          public?static?DOMSource?domSource;
          ????
          public?static?StreamResult?streamResult;
          ????
          public?static?void?main(String[]?args)?{
          ????????
          try?{
          ????????????test();
          ????????}?
          catch?(SAXException?e)?{
          ????????????
          //?TODO?Auto-generated?catch?block
          ????????????e.printStackTrace();
          ????????}?
          catch?(IOException?e)?{
          ????????????
          //?TODO?Auto-generated?catch?block
          ????????????e.printStackTrace();
          ????????}
          ????}
          ????
          private?static?void?createNode()?{
          ????????Element?root
          =document.getDocumentElement();
          ????????Element?firstNode
          =document.createElement("other");
          ????????root.appendChild(firstNode);
          ????????Text?text
          =document.createTextNode("test");
          ????????Element?nextNode
          =document.createElement("state");
          ????????nextNode.appendChild(text);
          ????????firstNode.appendChild(nextNode);
          ????????
          ????????
          ????}
          ????
          public?static?void?test()?throws?SAXException,?IOException{
          ????
          /*DocumentBuilderFactory的靜態(tài)方法newInstance創(chuàng)建了一個(gè)DocumentBuilderFactory實(shí)例,然后調(diào)用
          ??????newDocumentBuilder()方法創(chuàng)建一個(gè)DocumentBuilder對(duì)象
          ???????用DocumentBuilder的parse()方法就可以來(lái)解析xml文檔并建立Dom模型。
          ????????
          ??????DocumentBuilderFactory?factory?=?DocumentBuilderFactory.newInstance();?創(chuàng)建一個(gè)xml解析器
          ??????Document接口描述了對(duì)應(yīng)于整個(gè)xml文檔的對(duì)應(yīng)樹(shù),提供對(duì)文檔的訪問(wèn)。
          ????????
          ??????DOM標(biāo)準(zhǔn)模型中并沒(méi)有定義輸出的接口,因而如果需要進(jìn)行文檔輸出的話,
          ???????就需要用到JAXP的擴(kuò)展,使用到XmlDocument。這兒有一個(gè)較為簡(jiǎn)便的方法,
          ???????就是用強(qiáng)制類(lèi)型轉(zhuǎn)換,把一個(gè)Document類(lèi)轉(zhuǎn)換成XmlDocument,然后,就可以使用XmlDocument的write()方法了
          ??????XmlDocument?xdoc?=?(XmlDocument)?document;?
          ??????xdoc.write?(System.out);
          ????
          */
          ????????
          //獲取一個(gè)xml解析器
          ????????factory=DocumentBuilderFactory.newInstance();
          ????????
          try?{
          ????????????
          //解析XML文件生成DOM文檔的接口類(lèi),以便訪問(wèn)DOM
          ????????????parser=factory.newDocumentBuilder();
          ????????????document
          =parser.parse("parseXML.xml");
          ????????????Element?element?
          =?document.getDocumentElement();
          ????????????System.out.println(element);
          ????????????NodeList?list
          =element.getChildNodes();
          ????????????GetElement(list);//解析子節(jié)點(diǎn)
          ????????????createNode();//向dom中插入節(jié)點(diǎn),并寫(xiě)入xml中
          ????????}?
          catch?(ParserConfigurationException?e)?{
          ????????????e.printStackTrace();
          ????????}
          ????????
          //獲得將DOM文檔轉(zhuǎn)化為xml的轉(zhuǎn)換器
          ????????transformerFactory=TransformerFactory.newInstance();
          ????????
          //下面調(diào)用JAXP的XSTL引擎來(lái)實(shí)現(xiàn)DOM樹(shù)中的數(shù)據(jù)到xml文件的功能,XSTL的引擎輸入為DOMSource對(duì)象,輸出為StreamResult對(duì)象。
          ????????try?{
          ????????????
          //Transform相當(dāng)于一個(gè)XSTL引擎,通常我們用它的處理XSL文件,
          ????????????
          //這里我們用它來(lái)輸出xml文件
          ????????????transform=transformerFactory.newTransformer();
          ????????????
          //創(chuàng)建一個(gè)DOMSource對(duì)象,參數(shù)為Document對(duì)象,該對(duì)象表現(xiàn)為轉(zhuǎn)化成別的表達(dá)形式的信息容器。
          ????????????domSource=new?DOMSource(document);
          ????????????
          //創(chuàng)建一個(gè)File對(duì)象,代表DOM?Tree所包含的數(shù)據(jù)的輸出介質(zhì),這是一個(gè)XML文件
          ????????????
          //創(chuàng)建一個(gè)StreamResult對(duì)象,該對(duì)象是將DOM對(duì)象文檔轉(zhuǎn)換為其他文檔的容器,可以是一個(gè)xml文件,txt文件。
          ????????????streamResult=new?StreamResult(new?File("test.xml"));
          ????????????
          //調(diào)用transform將DOM文件轉(zhuǎn)換為xml文件
          ????????????transform.transform(domSource,?streamResult);
          ????????????
          ????????}?
          catch?(TransformerConfigurationException?e)?{
          ????????????
          ????????????e.printStackTrace();
          ????????}?
          catch?(TransformerException?e)?{
          ????????????
          //?TODO?Auto-generated?catch?block
          ????????????e.printStackTrace();
          ????????}
          ????????
          ????}
          ????
          private?static?void?GetElement(NodeList?list)?{
          ????????Node?node;
          ????????
          int?i;
          ????????String?str;
          ????????
          if(list.getLength()==0){
          ????????????
          return;
          ????????}
          ????????
          for(i=0;i<list.getLength();i++){
          ????????????
          ????????????node?
          =list.item(i);
          ????????????
          if(node.getNodeType()==1){//Node類(lèi)型對(duì)象
          ????????????????System.out.println(node.getNodeName());
          ????????????????GetElement(node.getChildNodes());
          ????????????}
          ????????????
          else?if(node.getNodeType()==3){//Text類(lèi)型對(duì)象
          ????????????????str=node.getNodeValue();
          ????????????????
          if(str.length()>0){
          ????????????????????System.out.println(str);
          ????????????????????
          ????????????????}
          ????????????}
          ????????}
          ????}
          }

          ???最近在學(xué)習(xí)ajax,在服務(wù)器解析xml文件,所以開(kāi)始學(xué)JAXP和digester.
          posted on 2006-12-11 08:58 windfree 閱讀(713) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): dom

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
          相關(guān)文章:
           
          主站蜘蛛池模板: 龙山县| 温州市| 城固县| 江口县| 岳池县| 元阳县| 金秀| 新平| 元谋县| 合江县| 丹棱县| 芜湖市| 南城县| 拜泉县| 托克逊县| 江孜县| 临桂县| 福清市| 石柱| 台东市| 松阳县| 甘孜县| 土默特右旗| 玛沁县| 普陀区| 凌云县| 吐鲁番市| 永修县| 水城县| 定边县| 岫岩| 西贡区| 阳原县| 如东县| 溧水县| 海林市| 海城市| 肃南| 万山特区| 武陟县| 赣州市|