JAXP解析XML

          1準備解析的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語言編程接口。
          ?
          //JAXP支持DOM、XSLT、SAX等標準?
          ?
          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的靜態方法newInstance創建了一個DocumentBuilderFactory實例,然后調用
          ??????newDocumentBuilder()方法創建一個DocumentBuilder對象
          ???????用DocumentBuilder的parse()方法就可以來解析xml文檔并建立Dom模型。
          ????????
          ??????DocumentBuilderFactory?factory?=?DocumentBuilderFactory.newInstance();?創建一個xml解析器
          ??????Document接口描述了對應于整個xml文檔的對應樹,提供對文檔的訪問。
          ????????
          ??????DOM標準模型中并沒有定義輸出的接口,因而如果需要進行文檔輸出的話,
          ???????就需要用到JAXP的擴展,使用到XmlDocument。這兒有一個較為簡便的方法,
          ???????就是用強制類型轉換,把一個Document類轉換成XmlDocument,然后,就可以使用XmlDocument的write()方法了
          ??????XmlDocument?xdoc?=?(XmlDocument)?document;?
          ??????xdoc.write?(System.out);
          ????
          */
          ????????
          //獲取一個xml解析器
          ????????factory=DocumentBuilderFactory.newInstance();
          ????????
          try?{
          ????????????
          //解析XML文件生成DOM文檔的接口類,以便訪問DOM
          ????????????parser=factory.newDocumentBuilder();
          ????????????document
          =parser.parse("parseXML.xml");
          ????????????Element?element?
          =?document.getDocumentElement();
          ????????????System.out.println(element);
          ????????????NodeList?list
          =element.getChildNodes();
          ????????????GetElement(list);//解析子節點
          ????????????createNode();//向dom中插入節點,并寫入xml中
          ????????}?
          catch?(ParserConfigurationException?e)?{
          ????????????e.printStackTrace();
          ????????}
          ????????
          //獲得將DOM文檔轉化為xml的轉換器
          ????????transformerFactory=TransformerFactory.newInstance();
          ????????
          //下面調用JAXP的XSTL引擎來實現DOM樹中的數據到xml文件的功能,XSTL的引擎輸入為DOMSource對象,輸出為StreamResult對象。
          ????????try?{
          ????????????
          //Transform相當于一個XSTL引擎,通常我們用它的處理XSL文件,
          ????????????
          //這里我們用它來輸出xml文件
          ????????????transform=transformerFactory.newTransformer();
          ????????????
          //創建一個DOMSource對象,參數為Document對象,該對象表現為轉化成別的表達形式的信息容器。
          ????????????domSource=new?DOMSource(document);
          ????????????
          //創建一個File對象,代表DOM?Tree所包含的數據的輸出介質,這是一個XML文件
          ????????????
          //創建一個StreamResult對象,該對象是將DOM對象文檔轉換為其他文檔的容器,可以是一個xml文件,txt文件。
          ????????????streamResult=new?StreamResult(new?File("test.xml"));
          ????????????
          //調用transform將DOM文件轉換為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類型對象
          ????????????????System.out.println(node.getNodeName());
          ????????????????GetElement(node.getChildNodes());
          ????????????}
          ????????????
          else?if(node.getNodeType()==3){//Text類型對象
          ????????????????str=node.getNodeValue();
          ????????????????
          if(str.length()>0){
          ????????????????????System.out.println(str);
          ????????????????????
          ????????????????}
          ????????????}
          ????????}
          ????}
          }

          ???最近在學習ajax,在服務器解析xml文件,所以開始學JAXP和digester.
          posted on 2006-12-11 08:58 windfree 閱讀(713) 評論(0)  編輯  收藏 所屬分類: dom

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


          網站導航:
          相關文章:
           
          主站蜘蛛池模板: 法库县| 延长县| 固镇县| 随州市| 盐城市| 岑溪市| 温州市| 忻城县| 府谷县| 甘孜县| 临潭县| 海丰县| 宁武县| 澄迈县| 十堰市| 大冶市| 阳高县| 白山市| 凤翔县| 焦作市| 宣武区| 新郑市| 临泽县| 辽阳县| 会同县| 尼勒克县| 阿拉善右旗| 邵武市| 南澳县| 旬阳县| 布尔津县| 南京市| 婺源县| 娄底市| 保靖县| 东平县| 偏关县| 昭苏县| 县级市| 儋州市| 衡阳县|