<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    博學而篤志,好問而近思

    關于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 冰川 閱讀(1919) 評論(1)  編輯  收藏

    評論

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

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


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


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

    導航

    統計

    常用鏈接

    留言簿(14)

    隨筆檔案

    BlogJava的幫助

    朋友的博客

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    快樂工作—享受生活
    主站蜘蛛池模板: 国产亚洲精品观看91在线| 精品免费国产一区二区| 亚洲综合图色40p| 欧洲乱码伦视频免费国产| 国产精品无码一区二区三区免费| 亚洲国产成人无码av在线播放| 精品无码国产污污污免费网站 | www.xxxx.com日本免费| 亚洲国产一级在线观看 | 国产亚洲综合一区二区三区| 日本不卡免费新一二三区| 亚洲国产精品无码观看久久| 免费观看男人免费桶女人视频| 亚洲欧美日韩综合俺去了| 免费看a级黄色片| 羞羞漫画小舞被黄漫免费| 成人亚洲综合天堂| 中文在线观看免费网站| 亚洲一区二区电影| 免费大片黄在线观看yw| 亚洲国产精品无码第一区二区三区| 免费真实播放国产乱子伦| 97在线免费视频| 亚洲高清不卡视频| 最近2019中文免费字幕| 免费视频成人国产精品网站| 亚洲精品国产精品乱码视色| 国产精品免费网站| 亚洲Av永久无码精品黑人| 久久亚洲色一区二区三区| 99在线视频免费| 亚洲国产成人久久综合| 相泽亚洲一区中文字幕| 18女人毛片水真多免费| 亚洲精品无码日韩国产不卡av| 亚洲午夜av影院| 久久成人国产精品免费软件| 最新亚洲人成无码网www电影| 亚洲av中文无码乱人伦在线播放 | 国产亚洲一区区二区在线 | 无码日韩精品一区二区三区免费 |