gpt4 book ai didi

java - 从 XML 中获取值到数组中

转载 作者:行者123 更新时间:2023-11-30 11:52:59 24 4
gpt4 key购买 nike

我在从 XML 读取数据并将其加载到数组中时遇到了一些问题。这是我的代码:

私有(private)无效 LoadMap(字符串路径){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ( ); 文档 document = null;

try {
DocumentBuilderFactory builder = DocumentBuilderFactory.newInstance();
builder.setIgnoringElementContentWhitespace(true);
document = builder.newDocumentBuilder().parse(path);

Element Map = document.getDocumentElement();
Node nodeTileset = Map.getElementsByTagName("tileset").item(0);
Node nodeData = Map.getElementsByTagName("data").item(0);

NamedNodeMap attribTileset = nodeTileset.getAttributes();
layers = Integer.parseInt(attribTileset.getNamedItem("layers").getNodeValue());
width = 50;
height = 50;
name = Map.getAttribute("name");

// Creamos el array y lo rellenamos con los valores
array = new int[layers][height][width];

Node layer, row, column;
for(int i = 0; i < layers; i++) {
layer = nodeData.getChildNodes().item(i);
for(int j = 0; j < height; j++) {
if(layer.getNodeType() != Node.TEXT_NODE) {
row = layer.getChildNodes().item(j);
for(int k = 0; k < width; k++) {
if(row.getNodeType() != Node.TEXT_NODE) {
column = row.getChildNodes().item(k);
if(column.getNodeType() != Node.TEXT_NODE) {
array[i][j][k] = Integer.parseInt(column.getTextContent());
}
}
}
}
}
}
}
catch(ParserConfigurationException e) {
e.printStackTrace();
}
catch (SAXException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}

最佳答案

问题是您忽略了输入 XML 中仅包含空白文本节点的事实,这些节点在使用 getChildNodes().item(i) 时占据了索引位置。 .您必须检查每个节点类型并忽略非元素节点,以便您只处理您想要的节点。

根据您的输入,我可以看出每个行标签之间有一个空白节点,所以

column = row.getChildNodes().item(k);

其中 i == 1,返回一个文本节点。由于文本节点没有子节点,column此时为空,导致 NPE。

这也意味着您不能盲目地使用 <tileset> 中的计数标记为循环边界。您必须在处理每个节点类型之前对其进行测试,并对实际处理的节点进行计数,直到达到预期的总数(顺便说一句,这是错误的;有 50 行和 50 列)。

关于java - 从 XML 中获取值到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com