2012-04-26 153 views
3

大家好我在java中有一個XML文件,其中持有數字的二維數組,它看起來就像讀取XML文件的Java

<tableNumbers> 
    <row id="0"> 
     <column id="0"> 4 </column> 
     <column id="1"> 2 </column> 
     <column id="2"> 5 </column> 
     <column id="3"> 6 </column> 
    </row> 
    <row id="1"> 
     <column id="0"> 5 </column> 
     <column id="1"> 10 </column> 
     <column id="2"> 7 </column> 
     <column id="3"> 9 </column> 
    </row> 
</tableNumbers> 

現在每行的表有相同數量的柱的側向承載力和我我試圖做的是循環通過xml並將XML文件中的數字存儲到Integer數組中。 (例如,行0列0將被存儲在號碼[0] [0]

我現在有該代碼是:

public static Integer[][] getNumbers(File file, int noRows, int noColums){ 
     Integer[][] numbersArray = new Integer[noRows][noColumns]; 

     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
     try { 
      Document document = docBuilderFactory.newDocumentBuilder().parse(file); 
      Element rootElement = document.getDocumentElement(); 

      NodeList rowList = rootElement.getElementsByTagName("row"); 
      if ((rowList != null)) 
       for (int i = 0; i < rowList.getLength(); i++) { 
        NodeList columnsList = rowList.item(i).getChildNodes(); 
        if ((columnsList != null)) 
         for (int j = 0; j < columnsList.getLength(); j++) { 
          Element number = (Element) columnsList.item(j); 
          System.out.println("(" +i + "," + j + ") " + number.getNodeValue()); 
          numbersArray[i][j] = number.getNodeValue(); 
         } 
       } 

      return numbersArray; 
     } 
     catch (Exception c){} 
     return null; 
} 

從標準幾行輸出是:

(0,0) null 
(0,1) null 
(0,2) null 
(0,3) null 
(1,0) null 
(1,1) null 
(1,2) null 
(1,3) null 

這是從所有的細胞中返回的值是null。我知道錯誤是從XML文件中讀取。如果有誰能夠告訴我在哪裏,我錯了,我將不勝感激

+1

無關的評論:你不需要'&&(rowList.getLength()> 0'和'&&(columnsList.getLength()> 0)'條件:如果是的getLength 0環奪得」 t運行反正 – assylias 2012-04-26 08:59:40

+0

感謝修改上面的反映 – 2012-04-26 09:04:12

回答

3

我想補充以下內容:

Element number = (Element) columnsList.item(j); 
if ("column".equals(number.getTagName())) } 
    System.out.println("(" +i + "," + j + ") " + number.getTextContent()); 
} 

因爲你可能有一個空元素。另外,我使用getTextContent()方法從Node聲明。

0

XML示例是否爲精確副本?如果是這樣,那麼你的關閉'行'標籤有錯誤。他們應該是</row>(即他們缺少斜線)。

+0

沒有我寫它到錯誤的問題謝謝指出,雖然 – 2012-04-26 09:01:26

+0

不用擔心,我只是意識到,你不會得到你有輸出,如果它沒有' t識別開始和結束標記回到代碼:) – David 2012-04-26 09:02:57

0

嘗試System.out.println("(" +i + "," + j + ") " + number.item(0).getNodeValue());代替System.out.println("(" +i + "," + j + ") " + number.getNodeValue());

OR

NodeList valList = number.getChildNodes(); 
System.out.println("Last Name : " + ((Node) valList.item(0)).getNodeValue()); 

希望這樣的作品,

0

的getNodeValue返回節點的值 - 列節點沒有一個值(除了空格)。他們應該包含文字元素,雖然,他們將包含的值,你需要

0

我做了一些改變,使其工作。這是片段。

    for (int j = 0; j < columnsList.getLength(); j++) { 
         if ("column".equals(columnsList.item(j) 
           .getNodeName())) { 
          Element number = (Element) columnsList.item(j); 
          System.out.println("(" + i + "," + j + ") " 
            + columnsList.item(j).getTextContent()); 
          numbersArray[i][j] = Integer 
            .parseInt(columnsList.item(j) 
              .getTextContent().trim()); 
         } 
        } 
+0

讓我猜測,你用我的例子,並對代碼進行了更改?對? – 2012-04-26 10:26:28