大家好我在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文件中读取。如果有人能告诉我哪里出错了,我将非常感激
答案 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());
}
}