3

大家好,我在 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 文件中的数字存储到一个整数数组中。(例如,第 0 行第 0 列将存储在 numbers[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 文件中读取的。如果有人能告诉我哪里出错了,我将不胜感激

4

5 回答 5

3

我会添加以下内容:

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

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

于 2012-04-26T09:18:38.103 回答
0

该 XML 示例是准确的副本吗?如果是这样,那么您的结束“行”标签有错误。他们应该是</row>(即他们缺少斜线)。

于 2012-04-26T08:58:39.330 回答
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());

希望有效,

于 2012-04-26T09:05:36.597 回答
0

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

于 2012-04-26T09:10:04.067 回答
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());
                        }
                    }
于 2012-04-26T09:37:25.043 回答