2012-03-14 87 views
0

我需要從下面的xml中讀取讀取值,並且正在使用saxparser進行此操作,但在讀取標記時卡住了它多次出現,我無法讀取下一行標記,誰能幫我....?在JAVA中解析XML時,存在重複標記

整個數據出現在標籤之間,並且引用不同的表格,並且tage給出了需要插入的記錄集合並且引用列名稱和值需要被插入到特定列中。

<?xml version="1.0" encoding="UTF-8"?> 
<DATA> 
<TABLEDATA name="web_order_header" rows="1"> 
<ROW> 
<FIELD name="order_id"> 40403141201067683</FIELD> 
<FIELD name="order_date"> Mar 14 , 2012</FIELD> 
<FIELD name="company_name">Testing</FIELD> 
<FIELD name="company_website"> N/A </FIELD> 
<FIELD name="customer_firstname">uni</FIELD> 
<FIELD name="customer_lastname">u</FIELD> 
<FIELD name="email">[email protected]</FIELD> 
<FIELD name="billto_contact">uni</FIELD> 
<FIELD name="billto_phone">78784</FIELD> 
<FIELD name="billto_phone_ext">N/A</FIELD> 
<FIELD name="billto_address">ss</FIELD> 
<FIELD name="billto_city">mys</FIELD> 
<FIELD name="billto_state">Kar</FIELD> 
<FIELD name="billto_zip">5678945</FIELD> 
<FIELD name="shipto_contact">uni</FIELD> 
<FIELD name="shipto_phone">78784</FIELD> 
<FIELD name="shipto_phone_ext">N/A</FIELD> 
<FIELD name="shipto_address">ss</FIELD> 
<FIELD name="shipto_city">mys</FIELD> 
<FIELD name="shipto_state">Kar</FIELD> 
<FIELD name="shipto_zip">5678945</FIELD> 
</ROW> 
</TABLEDATA> 

<TABLEDATA name="web_order_detail" rows="3"> 
<ROW> 
<FIELD name="order_id"> 40403141201067683</FIELD> 
<FIELD name="qty">1</FIELD> 
<FIELD name="item_id">JUS72-28250</FIELD> 
<FIELD name="mfr">Justrite Manufacturing Co</FIELD> 
<FIELD name="item_desc">EcoPolyBlend&amp;trade; Drum Collection Station For Spills</FIELD> 
<FIELD name="uom">Each</FIELD> 
<FIELD name="price">739.00</FIELD> 
</ROW> 
<ROW> 
<FIELD name="order_id"> 40403141201067683</FIELD> 
<FIELD name="qty">1</FIELD> 
<FIELD name="item_id">COM62-CAS-B51V80-CA1B</FIELD> 
<FIELD name="mfr">Compressed Air Systems</FIELD> 
<FIELD name="item_desc">5HP 80 GAL 15CFM Reciprocating Air Compressor</FIELD> 
<FIELD name="uom">Each</FIELD> 
<FIELD name="price">1265.33</FIELD> 
</ROW> 
<ROW> 
<FIELD name="order_id"> 40403141201067683</FIELD> 
<FIELD name="qty">2</FIELD> 
<FIELD name="item_id">KIM11-05701</FIELD> 
<FIELD name="mfr">Kimberly Clark Corp</FIELD> 
<FIELD name="item_desc">Wypall&amp;reg; 12.5&amp;quot; x 13&amp;quot; L40 Q-Fold White Towel</FIELD> 
<FIELD name="uom">Case</FIELD> 
<FIELD name="price">88.00</FIELD> 
</ROW> 
</TABLEDATA> 
</DATA> 

這是我的JAVA代碼

public void readXml(Document requestDoc,PrintStream out)throws IOException, JDOMException, SQLException, ParseException { 
      Document responseDoc = null; 


      Element root = requestDoc.getRootElement(); 

      List tableNameList = root.getChildren("TABLEDATA"); 

      for(int i=0; i<tableNameList.size(); i++){ 
       Element table = (Element) tableNameList.get(i); 
       String tableName = table.getAttribute("name").getValue(); 
       int numOfRows = table.getAttribute("rows").getIntValue(); 
       System.out.println(tableName+" : tableName---------------------- numOfRows : "+numOfRows); 

        List rowList = root.getChild("TABLEDATA").getChildren("ROW"); 
        for(int j=0; j<rowList.size(); j++){ 
         Element row = (Element) rowList.get(j); 
         System.out.println("row : "+rowList.size()); 

         List fieldList = root.getChild("TABLEDATA").getChild("ROW").getChildren("FIELD"); 
         System.out.println("----------------------"); 
         for(int k=0; k<fieldList.size(); k++){ 
          Element field = (Element) fieldList.get(k); 
          String fieldName = field.getAttribute("name").getValue(); 
          String fieldValue = field.getTextTrim(); 
          System.out.println(fieldName+"----------------------"+fieldValue); 
         } 
         System.out.println("----------------------"); 
        } 


      } 
+0

您的問題的主題是誤導,因爲您根本不使用SAX來解析此XML,您正在使用DOM。 Document對象是一個DOM類。 – 2012-03-14 16:27:32

回答

2

你一直在尋找的第一個表,並在第一行。要修復它,請使用for循環中的當前元素。

更換

List rowList = root.getChild("TABLEDATA").getChildren("ROW"); 

List rowList = table.getChildren("ROW"); 

List fieldList = root.getChild("TABLEDATA").getChild("ROW").getChildren("FIELD"); 

+1

謝謝Andreas_D它的工作...... :) – Warrior 2012-03-14 17:01:16