博學而篤志,好問而近思

          關于Java中的XML讀寫應用

          XML 應用中,最常用也最實用的莫過于 XML 文件的讀寫,這里通過一個簡單的 XML 文件讀寫來作簡要分析。可以在任何文本編輯器中先建立如下結構的 XML 文件,類似于 HTML 結構,但 XML 語義比較嚴格,起始標記必須配對,比如 " 〈學生花名冊〉 " " 〈/學生花名冊〉 " 對應,空格多少可不必在意,但一般都以縮格形式書寫,便于閱讀。把此文件命名為 Input.xml ,可以在任何支持 XML 的瀏覽器中打開測試一下,如果輸入正確,在瀏覽中可以看到此文件的樹形表示結構。

          ?xml   version="1.0"   encoding="GB2312"? > 
          <學生花名冊> 
           <學生 性別  =   " " > 
            <姓名>李華< / 姓名>  
            <年齡> 14 / 年齡> 
            <電話> 6287555 / 電話> 
           < / 學生> 
           <學生 性別  =   " " > 
            <姓名>張三< / 姓名> 
            <年齡> 16 / 年齡> 
            <電話> 8273425 / 電話> 
           < / 學生> 
          / 學生花名冊>
           
            準備工作做完后,接著就開始寫實質性的 JAVA 代碼了。為保存從 XML 文件讀入的信息,需要先建一個簡單的 Bean 來保存學生信息,命名為 StudentBean ,代碼如下所示: 

          public
            class   StudentBean   {  
            private   String   sex;   // 學生性別 
            private   String   name;   // 學生姓名 
            private   int   age;   // 學生年齡 
            private   String   phone;   // 電話號碼 

            public   void   setSex(String   s)   {  
             sex   =   s;  
            }  
            public   void   setName(String   s)   {  
             name   =   s;  
            }  
            public   void   setAge(int   a)   {  
             age   =   a;  
            }  
            public   void   setPhone(String   s)   {  
             phone   =   s;  
            }  
            public   String   getSex()   {  
             return   sex;  
            }  
            public   String   getName()   {  
             return   name;  
            }  
            public   int   getAge()   {  
             return   age;  
            }   
            public   String   getPhone()   {  
             return   phone;  
            }  
          }
           

            之后寫 XML 的測試類,筆者把這個類命名為 XMLTest ,為了讀寫 XML 文件,需要導入如下 JAVA 包, "http://" 后為注釋說明,筆者的環境是 JDK   1.3.1 _04 ,在 JDK   1.4.0 中測試也通過, XML 解釋器用 Apache Crimson ,可以到 Apache 主頁去上載。 

          import
            java.io.*;   //Java 基礎包,包含各種 IO 操作 
          import
            java.util.*;   //Java 基礎包,包含各種標準數據結構操作 
          import
            javax.xml.parsers.*;   //XML 解析器接口 
          import
            org.w3c.dom.*;   //XML DOM 實現 
          import
            org.apache.crimson.tree.XmlDocument;// XML 文件要用到 

            為了保存多個學生信息,還得借助一個集合類 ( 并不是單純意義上的集合, JAVA 中的集合是集合框架的概念,包含向量、列表、哈希表等),這里采用 Vector 向量類。定義在 XMLTest 測試類中,命名為 student_Vector 。然后定義兩個方法 readXMLFile writeXMLFile ,實現讀寫操作。代碼如下: 

          private
            void   readXMLFile(String   inFile)   throws   Exception   {  
            // 為解析 XML 作準備,創建 DocumentBuilderFactory 實例 , 指定 DocumentBuilder  
            DocumentBuilderFactory   dbf   =   DocumentBuilderFactory.newInstance();  
            DocumentBuilder   db   =   null;  
            try   {  
             db   =   dbf.newDocumentBuilder();  
            }catch   (ParserConfigurationException   pce)   {  
             System.err.println(pce);   // 出異常時輸出異常信息,然后退出,下同 
             System.exit(1);  
            }  

            Document   doc   =   null;  
            try   {  
             doc   =   db.parse(inFile);  
            }   catch   (DOMException   dom)   {  
             System.err.println(dom.getMessage());  
             System.exit(1);  
            }   catch   (IOException   ioe)   {  
             System.err.println(ioe);  
             System.exit(1);  
            }  
            // 下面是解析 XML 的全過程,比較簡單,先取根元素 " 學生花名冊 "  
            Element   root   =   doc.getDocumentElement();  
            // " 學生 " 元素列表 
            NodeList   students   =   root.getElementsByTagName(" 學生 ");  
            for   (int   i   =   0;   i  <  students.getLength();   i++)   {  
             // 依次取每個 " 學生 " 元素 
             Element   student   =   (Element)   students.item(i);  
             // 創建一個學生的 Bean 實例 
             StudentBean   studentBean   =   new   StudentBean();  
             // 取學生的性別屬性 
             studentBean.setSex(student.getAttribute(" 性別 "));  
             // " 姓名 " 元素,下面類同 
             NodeList   names   =   student.getElementsByTagName(" 姓名 ");  
             if   (names.getLength()   ==   1)   {  
              Element   e   =   (Element)   names.item(0);  
              Text   t   =   (Text)   e.getFirstChild();  
              studentBean.setName(t.getNodeValue());  
             }  

             NodeList   ages   =   student.getElementsByTagName(" 年齡 ");  
             if   (ages.getLength()   ==   1)   {  
              Element   e   =   (Element)   ages.item(0);  
              Text   t   =   (Text)   e.getFirstChild();  
              studentBean.setAge(Integer.parseInt(t.getNodeValue()));  
             }  

             NodeList   phones   =   student.getElementsByTagName(" 電話 ");  
             if   (phones.getLength()   ==   1)   {  
              Element   e   =   (Element)   phones.item(0);  
              Text   t   =   (Text)   e.getFirstChild();  
              studentBean.setPhone(t.getNodeValue());  
             }  

             student_Vector.add(studentBean);  
            }  
          }
           

          private
            void   writeXMLFile(String   outFile)   throws   Exception   {  
            // 為解析 XML 作準備,創建 DocumentBuilderFactory 實例 , 指定 DocumentBuilder  
            DocumentBuilderFactory   dbf   =   DocumentBuilderFactory.newInstance();  
            DocumentBuilder   db   =   null;  
            try   {  
             db   =   dbf.newDocumentBuilder();  
            }   catch   (ParserConfigurationException   pce)   {  
             System.err.println(pce);  
             System.exit(1);  
            }  

            Document   doc   =   null;  
            doc   =   db.newDocument();  

            // 下面是建立 XML 文檔內容的過程,先建立根元素 " 學生花名冊 "  
            Element   root   =   doc.createElement(" 學生花名冊 ");  
            // 根元素添加上文檔 
            doc.appendChild(root);  

            // 取學生信息的 Bean 列表 
            for   (int   i   =   0;   i  <  student_Vector.size();   i++)   {  
             // 依次取每個學生的信息 
             StudentBean   studentBean   =   (StudentBean)   student_Vector.get(i);  
             // 建立 " 學生 " 元素,添加到根元素 
             Element   student   =   doc.createElement(" 學生 ");  
             student.setAttribute(" 性別 ",   studentBean.getSex());  
             root.appendChild(student);  
             // 建立 " 姓名 " 元素,添加到學生下面,下同 
             Element   name   =   doc.createElement(" 姓名 ");  
             student.appendChild(name);  
             Text   tName   =   doc.createTextNode(studentBean.getName());  
             name.appendChild(tName);  

             Element   age   =   doc.createElement(" 年齡 ");  
             student.appendChild(age);  
             Text   tAge   =   doc.createTextNode(String.valueOf(studentBean.getAge()));  
             age.appendChild(tAge);  

             Element   phone   =   doc.createElement(" 電話 ");  
             student.appendChild(phone);  
             Text   tPhone   =   doc.createTextNode(studentBean.getPhone());  
              phone.appendChild(tPhone);  
            }  
            // XML 文檔輸出到指定的文件 
            FileOutputStream   outStream   =   new   FileOutputStream(outFile);  
            OutputStreamWriter   outWriter   =   new   OutputStreamWriter(outStream);  
            ((XmlDocument)   doc).write(outWriter,   "GB2312");  
            outWriter.close();  
            outStream.close();   
          }
           

            最后加入測試主函數,如下: 

          public
            static   void   main(String[]   args)   throws   Exception   {  
            // 建立測試實例  
            XMLTest   xmlTest   =   new   XMLTest();  
            // 初始化向量列表 
            xmlTest.student_Vector   =   new   Vector();  
           
            System.out.println(" 開始讀 Input.xml 文件 ");  
            xmlTest.readXMLFile("Input.xml");  
           
            System.out.println(" 讀入完畢 , 開始寫 Output.xml 文件 ");  
            xmlTest.writeXMLFile("Output.xml");  
            System.out.println(" 寫入完成 ");  
          }
           

            好了,保存好 StudentBean XMLTest ,把 Input.xml 保存到工作目錄下。如果您輸入很仔細,沒敲錯字母的話,可以看到 " 寫入完成 " 了,去瞧瞧 Output.xml 文件和 Input.xml 文件是不是一樣吧。

          posted on 2006-06-21 14:05 冰川 閱讀(1922) 評論(1)  編輯  收藏

          評論

          # re: 關于Java中的XML讀寫應用 2009-10-23 17:04

          很實用,謝謝  回復  更多評論   


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


          網站導航:
           
          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導航

          統計

          常用鏈接

          留言簿(14)

          隨筆檔案

          BlogJava的幫助

          朋友的博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          快樂工作—享受生活
          主站蜘蛛池模板: 东乡县| 波密县| 麦盖提县| 崇明县| 南涧| 安达市| 泗阳县| 石河子市| 呼伦贝尔市| 平昌县| 黄石市| 易门县| 绥江县| 黎平县| 龙陵县| 茶陵县| 台东市| 阳原县| 兖州市| 施秉县| 万宁市| 湛江市| 金门县| 蒙自县| 安义县| 澜沧| 双城市| 平遥县| 东兴市| 修武县| 彰武县| 新昌县| 南漳县| 夏津县| 张家口市| 湖州市| 水富县| 琼中| 延安市| 志丹县| 宜都市|