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

    評論

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

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


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


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

    導航

    統計

    常用鏈接

    留言簿(14)

    隨筆檔案

    BlogJava的幫助

    朋友的博客

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    快樂工作—享受生活
    主站蜘蛛池模板: 成在人线av无码免费高潮水| 在线a亚洲v天堂网2018| 免费VA在线观看无码| 亚洲黄色免费观看| 在线观看亚洲成人| 情侣视频精品免费的国产| 91免费人成网站在线观看18| 巨胸喷奶水视频www免费视频| 亚洲精品乱码久久久久蜜桃| 亚洲精品综合久久中文字幕| 国精无码欧精品亚洲一区| 亚洲AV无码成人精品区大在线 | 国产亚洲精久久久久久无码AV| 野花高清在线观看免费3中文 | 免费中文字幕在线观看| 日韩精品无码区免费专区 | 亚洲欧洲成人精品香蕉网| 又大又黄又粗又爽的免费视频| 无码av免费毛片一区二区| 99re6热视频精品免费观看| 国产在线精品观看免费观看| 日韩在线观看视频免费| 最好2018中文免费视频| 亚洲精品无码av片| 亚洲人成色4444在线观看| 亚洲一区欧洲一区| 亚洲人成网站看在线播放| 亚洲成人在线免费观看| 久久精品国产亚洲av麻豆小说| 亚洲成色www久久网站夜月| 精品久久香蕉国产线看观看亚洲| 亚洲熟妇少妇任你躁在线观看无码| 成人免费毛片视频| 成全视频免费高清| 最近中文字幕mv免费高清电影| 日本免费网址大全在线观看| 国产成人精品免费视| 福利免费观看午夜体检区| aa级一级天堂片免费观看| 我要看WWW免费看插插视频| 最新猫咪www免费人成|