我正在从一个项目,需要从一个XML文件,它有childs和subchilds,我必须打印每年的信息(每个月与相应的日子)。阅读多个元素的XML
这是我的XML文件:
<?xml version="1.0"?>
<Forecast>
<year name="2016">
<currentyear>2016</currentyear>
<month name="May">
<currentmonth>May</currentmonth>
<day name="Monday">
<currentday>Monday</currentday>
<date>22</date>
<temperature>29</temperature>
<weather>sunny</weather>
<humidity>30</humidity>
</day>
<day name="Tuesday">
<currentday>Tuesday</currentday>
<date>23</date>
<temperature>31</temperature>
<weather>sunny</weather>
<humidity>40</humidity>
</day>
<day name="Wednesday">
<currentday>Wednesday</currentday>
<date>24</date>
<temperature>24</temperature>
<weather>rainy</weather>
<humidity>60</humidity>
</day>
<day name="Thursday">
<currentday>Thursday</currentday>
<date>25</date>
<temperature>33</temperature>
<weather>sunny</weather>
<humidity>30</humidity>
</day>
</month>
<month name="June">
<currentmonth>June</currentmonth>
<day name="Monday">
<currentday>Monday</currentday>
<date>13</date>
<temperature>34</temperature>
<weather>sunny</weather>
<humidity>30</humidity>
</day>
<day name="Tuesday">
<currentday>Tuesday</currentday>
<date>14</date>
<temperature>37</temperature>
<weather>sunny</weather>
<humidity>25</humidity>
</day>
<day name="Wednesday">
<currentday>Wednesday</currentday>
<date>15</date>
<temperature>36</temperature>
<weather>sunny</weather>
<humidity>20</humidity>
</day>
<day name="Thursday">>
<currentday>Thursday</currentday>
<date>16</date>
<temperature>39</temperature>
<weather>sunny</weather>
<humidity>15</humidity>
</day>
</month>
</year>
和我有下面的Java代码:
try
{
DocumentBuilderFactory docBuild = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuild.newDocumentBuilder();
Document doc = docBuilder.parse(new File("D:\\users\\Popa Andrei\\Java Workspace\\YearForecast\\forecast.xml"));
doc.getDocumentElement().normalize();
System.out.println("Root element:"+doc.getDocumentElement().getNodeName());
NodeList listYears = doc.getElementsByTagName("year");
int totalYears = listYears.getLength();
System.out.println("Total number of years:"+totalYears);
NodeList listMonths = doc.getElementsByTagName("month");
int totalMonths = listMonths.getLength();
System.out.println("Total number of months:"+totalMonths);
NodeList listDays = doc.getElementsByTagName("day");
int totalDays = listDays.getLength();
System.out.println("Total number of days:"+totalDays);
for(int i = 0;i<listYears.getLength();i++)
{
Node firstYear= listYears.item(i);
if(firstYear.getNodeType() == Node.ELEMENT_NODE)
{
Element firstYearElement = (Element)firstYear;
System.out.println("Year:"+firstYearElement.getElementsByTagName("currentyear").item(0).getTextContent());
for(int j = 0;j<listMonths.getLength();j++)
{
Node firstMonth = listMonths.item(j);
if(firstMonth.getNodeType() == Node.ELEMENT_NODE)
{
Element firstMonthElement =(Element)firstMonth;
System.out.println("Month:"+firstMonthElement.getElementsByTagName("currentmonth").item(0).getTextContent()+"\n");
for(int k = 0 ;k<listDays.getLength();k++)
{
Node firstDay = listDays.item(k);
if(firstDay.getNodeType() == Node.ELEMENT_NODE)
{
Element firstDayElement = (Element)firstDay;
System.out.println("Day:"+firstDayElement.getElementsByTagName("currentday").item(0).getTextContent());
System.out.println("Date:"+firstDayElement.getElementsByTagName("date").item(0).getTextContent());
System.out.println("Temperature:"+firstDayElement.getElementsByTagName("temperature").item(0).getTextContent()+" degrees");
System.out.println("Weather:"+firstDayElement.getElementsByTagName("weather").item(0).getTextContent());
System.out.println("Humidity:"+firstDayElement.getElementsByTagName("humidity").item(0).getTextContent()+"%");
}
System.out.println("\n");
}
}
}
}
}
}catch (SAXParseException err) {
System.out.println ("** Parsing error" + ", line "
+ err.getLineNumber() + ", uri " + err.getSystemId());
System.out.println(" " + err.getMessage());
}catch (SAXException e) {
Exception x = e.getException();
((x == null) ? e : x).printStackTrace();
}catch (Throwable t) {
t.printStackTrace();
}
System.exit (0);
}
输出是这样的:
Root element:Forecast
Total number of years:1
Total number of months:2
Total number of days:8
Year:2016
Month:May
Day:Monday
Date:22
Temperature:29 degrees
Weather:sunny
Humidity:30%
Day:Tuesday
Date:23
Temperature:31 degrees
Weather:sunny
Humidity:40%
Day:Wednesday
Date:24
Temperature:24 degrees
Weather:rainy
Humidity:60%
Day:Thursday
Date:25
Temperature:33 degrees
Weather:sunny
Humidity:30%
Day:Monday
Date:13
Temperature:34 degrees
Weather:sunny
Humidity:30%
Day:Tuesday
Date:14
Temperature:37 degrees
Weather:sunny
Humidity:25%
Day:Wednesday
Date:15
Temperature:36 degrees
Weather:sunny
Humidity:20%
Day:Thursday
Date:16
Temperature:39 degrees
Weather:sunny
Humidity:15%
Month:June
Day:Monday
Date:22
Temperature:29 degrees
Weather:sunny
Humidity:30%
Day:Tuesday
Date:23
Temperature:31 degrees
Weather:sunny
Humidity:40%
Day:Wednesday
Date:24
Temperature:24 degrees
Weather:rainy
Humidity:60%
Day:Thursday
Date:25
Temperature:33 degrees
Weather:sunny
Humidity:30%
Day:Monday
Date:13
Temperature:34 degrees
Weather:sunny
Humidity:30%
Day:Tuesday
Date:14
Temperature:37 degrees
Weather:sunny
Humidity:25%
Day:Wednesday
Date:15
Temperature:36 degrees
Weather:sunny
Humidity:20%
Day:Thursday
Date:16
Temperature:39 degrees
Weather:sunny
Humidity:15%
问题我的输出应该是t他:
Root element:Forecast
Total number of years:1
Total number of months:2
Total number of days:8
Year:2016
Month:May
Day:Monday
Date:22
Temperature:29 degrees
Weather:sunny
Humidity:30%
Day:Tuesday
Date:23
Temperature:31 degrees
Weather:sunny
Humidity:40%
Day:Wednesday
Date:24
Temperature:24 degrees
Weather:rainy
Humidity:60%
Day:Thursday
Date:25
Temperature:33 degrees
Weather:sunny
Humidity:30%
Month:June
Day:Monday
Date:13
Temperature:34 degrees
Weather:sunny
Humidity:30%
Day:Tuesday
Date:14
Temperature:37 degrees
Weather:sunny
Humidity:25%
Day:Wednesday
Date:15
Temperature:36 degrees
Weather:sunny
Humidity:20%
Day:Thursday
Date:16
Temperature:39 degrees
Weather:sunny
Humidity:15%
有人可以帮我解决这个问题吗?
预期产出和实际产出有什么不同?它只是天气的数据(似乎你只需要晴天)是对的吗? –
预期的产出是最后一个,代码每个月都增加所有的日子,所以对于5月份我有8天,当我只有4个相同的时间去了7月 –