gpt4 book ai didi

java - 我在读取 XML 时收到错误的数据

转载 作者:行者123 更新时间:2023-12-01 11:41:59 27 4
gpt4 key购买 nike

我正在尝试从一个巨大的 XML 中收集数据,结构如下:

 <Ciutats>
<Ciutat>
<Nom>Torremolinos</Nom>
<Provincia>Malaga</Provincia>
<Dades>
<Dada dia='2015-01-18'>
<TempMax>10.4</TempMax>
<TempMin>7.0</TempMin>
<TempAve>8.7</TempAve>
<VMax>8.0</VMax>
<VRatxa>28.0</VRatxa>
<Prec>29.8</Prec>
</Dada>
<Dada dia='2015-01-19'>
<TempMax>13.1</TempMax>
<TempMin>8.7</TempMin>
<TempAve>10.9</TempAve>
<VMax>29.0</VMax>
<VRatxa>64.0</VRatxa>
<Prec>6.2</Prec>
</Dada>
....
</Ciutat>
<Ciutat>
<Nom>Valdemorillo</Nom>
<Provincia>Madrid</Provincia>
<Dades>
<Dada dia='2015-01-18'>
<TempMax>1.7</TempMax>
<TempMin>-2.2</TempMin>
<TempAve>-0.3</TempAve>
<VMax>5.0</VMax>
<VRatxa>13.0</VRatxa>
<Prec>1.2</Prec>
</Dada>
<Dada dia='2015-01-19'>
<TempMax>3.6</TempMax>
<TempMin>0.3</TempMin>
<TempAve>1.9</TempAve>
<VMax>41.0</VMax>
<VRatxa>69.0</VRatxa>
<Prec>4.0</Prec>
</Dada>
...
</Ciutat>
</Ciutat>

对于每个“Ciutat”,您都有“Nom”、“Provincia”和“Dades”,其中每个城市有 29 个对象,XML 总共有 784 个城市。

这是我读取 XML 的代码:

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File(fileName);
Document document = builder.parse(file);

Element ct = document.getDocumentElement();
NodeList ciutatList = ct.getElementsByTagName("Ciutat");
if (ciutatList != null && ciutatList.getLength() > 0) {
for (int i = 0; i < ciutatList.getLength(); i++) {

Element ciutats = (Element) ciutatList.item(i);
NodeList nomList = ciutats.getElementsByTagName("Nom");
if (nomList != null && nomList.getLength() > 0) {
Element nomElement = (Element) nomList.item(0);
nom = nomElement.getFirstChild().getNodeValue();
}

NodeList provList = ciutats.getElementsByTagName("Provincia");
if (provList != null && provList.getLength() > 0) {
Element provElement = (Element) provList.item(0);
prov = provElement.getFirstChild().getNodeValue();
}

tc = new TempsCiutat(nom, prov, 1000);

NodeList dadesList = ct.getElementsByTagName("Dades");
Element dadesElement = (Element) dadesList.item(0);

NodeList dadaList = dadesElement.getElementsByTagName("Dada");
for (int a = 0; a < dadaList.getLength(); a++) {
Date data = null;
float tempMax = 0, tempMin = 0, tempAve = 0, VMax = 0, VRatxa = 0, prec = 0;

Element dades = (Element) dadaList.item(a);

String dataS = dades.getAttribute("dia");
data = df.parse(dataS);

NodeList tempMaxList = dades.getElementsByTagName("TempMax");
if (tempMaxList != null && tempMaxList.getLength() > 0) {
Element tempMaxElement = (Element) tempMaxList.item(0);
String tempMaxS = tempMaxElement.getFirstChild().getNodeValue();
tempMax = Float.parseFloat(tempMaxS);
}

NodeList tempMinList = dades.getElementsByTagName("TempMin");
if (tempMinList != null && tempMinList.getLength() > 0) {
Element tempMinElement = (Element) tempMinList.item(0);
String tempMinS = tempMinElement.getFirstChild().getNodeValue();
tempMin = Float.parseFloat(tempMinS);
}
NodeList tempAveList = dades.getElementsByTagName("TempAve");
if (tempAveList != null && tempAveList.getLength() > 0) {
Element tempAveElement = (Element) tempAveList.item(0);
String tempAveS = tempAveElement.getFirstChild().getNodeValue();
tempAve = Float.parseFloat(tempAveS);
}
NodeList VmaxList = dades.getElementsByTagName("VMax");
if (VmaxList != null && VmaxList.getLength() > 0) {
Element VmaxElement = (Element) VmaxList.item(0);
String VMaxS = VmaxElement.getFirstChild().getNodeValue();
VMax = Float.parseFloat(VMaxS);
}
NodeList VRatxaList = dades.getElementsByTagName("VRatxa");
if (VRatxaList != null && VRatxaList.getLength() > 0) {
Element VRatxaElement = (Element) VRatxaList.item(0);
String VRatxaS = VRatxaElement.getFirstChild().getNodeValue();
VRatxa = Float.parseFloat(VRatxaS);
}
NodeList precList = dades.getElementsByTagName("Prec");
if (precList != null && precList.getLength() > 0) {
Element precElement = (Element) precList.item(0);
String precS = precElement.getFirstChild().getNodeValue();
prec = Float.parseFloat(precS);
}
TempsDia dia = new TempsDia(data, tempMax, tempMin, tempAve, VMax, VRatxa, prec);

tc.afegirTempsDia(dia);
}

tp.afegirCiutat(tc);
}

}

现在的问题是,当我读取第一个城市时,它做得正确,但是,当读取第二个城市时,名称和“Provincia”是正确的,但“Dades”与第一个城市相同,我想知道我是否必须以某种方式关闭达达阅读。

最佳答案

您有文档:

Element ct = document.getDocumentElement();

您将获得正确的城市节点列表:

NodeList ciutatList = ct.getElementsByTagName("Ciutat");

但是你得到了达德

NodeList dadesList = ct.getElementsByTagName("Dades");

它来自整个文档,因此您可以重新获得第一个Dades。相反,迭代 NodeList ciutatList 并调用

NodeList dades =
(Element) ciutatList.item(i).getElementsByTagName("Dades");

PS:为什么不使用 JAXB?

关于java - 我在读取 XML 时收到错误的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29450217/

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