读取XML文件java

时间:2012-04-26 08:53:46

标签: java xml

大家好我在java中有一个XML文件,它包含一个二维数组,看起来像

<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文件中读取。如果有人能告诉我哪里出错了,我将非常感激

5 个答案:

答案 0 :(得分:3)

我会添加以下内容:

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

因为你可能有一个空元素。另外,我正在使用getTextContent()声明中的Node方法。

答案 1 :(得分:0)

该XML示例是否是准确的副本?如果是这样,那么关闭的'row'标签会出错。它们应该是</row>(即它们缺少斜线)。

答案 2 :(得分:0)

尝试使用System.out.println("(" +i + "," + j + ") " + number.item(0).getNodeValue());代替System.out.println("(" +i + "," + j + ") " + number.getNodeValue());

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

希望有效,

答案 3 :(得分:0)

getNodeValue返回节点的值 - 列节点没有值(可能是空格除外)。它们应该包含文本元素,并且它们将包含您需要的值

答案 4 :(得分: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());
                        }
                    }