1. 程式人生 > >用DOM解析XML檔案並存入mysql資料庫

用DOM解析XML檔案並存入mysql資料庫

對於一個數據量大、複雜的xml檔案,要進行解析並且存入資料庫。首先要對xml檔案的dom結構有所瞭解,並進行分析,然後獲取自己想要的資料,之後進行資料的儲存。

接下來說明一下具體的步驟和方法。

一、解析xml檔案

我的xml檔案(這裡只是列出了一部分)如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <person>
  3.     <personID>22097</personID>
  4.     <FullName>Ajay Gupta</FullName>
  5.     <FirstName
    >Ajay</FirstName>
  6.     <LastName>Gupta</LastName>
  7.     <publication>
  8.         <title>Explanation-based Failure Recovery</title>
  9.         <year>1987</year>
  10.         <authors>Ajay Gupta</authors>
  11.         <jconf>AAAI</jconf>
  12.         <id
    >13048</id>
  13.         <label>0</label>
  14.         <organization>null</organization>
  15.     </publication>
  16.     <publication>
  17.         <title>Time Representation in Prolog Circuit Modelling</title>
  18.         <year>1991</year>
  19.         <authors>Yossi Lichtenstein,Bob Welham,Ajay Gupta
    </authors>
  20.         <jconf>ALPUK</jconf>
  21.         <id>39153</id>
  22.         <label>0</label>
  23.         <organization>null</organization>
  24.     </publication><prename="code"class="html"></person>
我想要的資料是publication中的id和authors,並且將id和authors都存為String格式,我的解析程式碼如下:

我建立了一個publication類,方便將資料儲存:

Publication類:

  1. publicclass Publication {    
  2.     private String id;    
  3.     private String authors;    
  4.     public String getAuthors() {  
  5.         return authors;  
  6.     }  
  7.     publicvoid setAuthors(String authors) {  
  8.         this.authors = authors;  
  9.     }  
  10.     public String getId() {    
  11.         return id;    
  12.     }    
  13.     publicvoid setId(String string) {    
  14.         this.id = string;    
  15.     }    
  16.     @Override
  17.     public String toString(){    
  18.         returnthis.id+":"+this.authors;    
  19.     }    
  20. }  

解析程式碼:
  1. privatestatic ArrayList<Publication> getParserAuthor() {  
  2.         ArrayList<Publication> list= new ArrayList<Publication>();  
  3.         //獲取DOM解析器
  4.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
  5.         DocumentBuilder builder;  
  6.         try {  
  7.                builder = factory.newDocumentBuilder();  
  8.                Document doc;  
  9.                doc = builder.parse(new File("Ajay Gupta.xml"));  
  10.                    //得到一個element根元素,獲得根節點
  11.                 Element root = doc.getDocumentElement();          
  12.                 System.out.println("根元素:"+root.getNodeName());  
  13.                 //子節點
  14.                 NodeList personNodes = root.getElementsByTagName("publication");  
  15.                 for(int i = 0; i<personNodes.getLength();i++){  
  16.                     Element personElement = (Element) personNodes.item(i);  
  17.                     Publication publication = new Publication();  
  18.                     NodeList childNodes = personElement.getChildNodes();  
  19.                     //System.out.println("*****"+childNodes.getLength());  
  20.                     for (int j = 0; j < childNodes.getLength(); j++) {  
  21.                     if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){  
  22.                         if("authors".equals(childNodes.item(j).getNodeName())){  
  23.                             publication.setAuthors(childNodes.item(j).getFirstChild().getNodeValue());  
  24.                         }elseif("id".equals(childNodes.item(j).getNodeName())){  
  25.                             publication.setId(childNodes.item(j).getFirstChild().getNodeValue());  
  26.                         }  
  27.                     }  
  28.                 }  
  29.                     list.add(publication);  
  30.                 }  
  31.                 for(Publication publication2 : list){  //為了檢視資料是否正確,進行列印結果
  32.                      System.out.println(publication2.toString());    
  33.                  }   
  34.         } catch (SAXException e) {  
  35.             e.printStackTrace();  
  36.         } catch (IOException e) {  
  37.             e.printStackTrace();          
  38.         } catch (ParserConfigurationException e) {  
  39.             e.printStackTrace();  
  40.         }  
  41.         return list;  
  42.     }  
二、存入資料庫
1)我建立的資料庫表結構為:

Publication表:



設定id的目的是讓資料能夠自增,記得要設定為主鍵並且是不為空。如果沒有客戶端可以建立資料庫和表,可以直接在命令列裡寫也是很簡單的。

2)插入資料庫。

在進行資料庫操作時,需要匯入連線資料庫的驅動,並測試是否連線成功。

  1. static String sqlStr = "jdbc:mysql://localhost:3306/Publications";  
  2.     static String rootName = "root";//資料庫名
  3.     static String rootPwd = "root";//資料庫密碼
  4.     publicstaticvoid writeToMysql(Publication publication) {  
  5.         System.out.println(publication);  
  6.         //1.載入driver驅動
  7.         try {  
  8.             // 載入MySql的驅動類
  9.             Class.forName("com.mysql.jdbc.Driver");  
  10.         } catch (ClassNotFoundException e) {  
  11.             System.out.println("找不到驅動程式類 ,載入驅動失敗!");  
  12.             e.printStackTrace();  
  13.         }  
  14.         //2.建立連線
  15.         Statement st = null;  
  16.         //呼叫DriverManager物件的getConnection()方法,獲得一個Connection物件
  17.         Connection con  =null;  
  18.         try {