XML读错标签
问题描述:
我想读一个xml,我需要得到每路各段,并把其他类的信息。XML读错标签
下面是XML文件:
<section_list>
<road_section begin="n0" end="n1">
<road>"E01"</road>
<wind_speed>3 m/s</wind_speed>
<segment_list>
<segment id="01">
<height>100</height>
<number_vehicles>20</number_vehicles>
</segment>
<segment id="02">
<height>148</height>
<number_vehicles>20</number_vehicles>
</segment>
</segment_list>
</road_section>
<road_section begin="n0" end="n2">
<road>"E01"</road>
<wind_speed>3 m/s</wind_speed>
<segment_list>
<segment id="03">
<height>100</height>
<number_vehicles>100</number_vehicles>
</segment>
</segment_list>
</road_section>
</section_list>
,当我运行的程序是,对于每个道路,他打印出所有的细分,例如用于道路“EO1”程序打印3个区段发生什么事当他应该只打印段ID = 01和ID = 02。
这是我的Java代码:
NodeList listSection = doc.getElementsByTagName("road_section");
for (int temp = 0; temp < listSection.getLength(); temp++) {
Node nNode = listSection.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Begin : " + eElement.getAttribute("begin") + "\tEnd: " + eElement.getAttribute("end"));
System.out.println("road : " + eElement.getElementsByTagName("road").item(0).getTextContent().replaceAll("\"", ""));
System.out.println("wind_speed : " + eElement.getElementsByTagName("wind_speed").item(0).getTextContent().trim().replaceAll("m/s", ""));
}
for (int i = 0; i < 1; i++) {
Element eElement = (Element) nNode;
NodeList listaSegmentos = eElement.getElementsByTagName("segment_list").item(i).getChildNodes();
for (int j = 0; j < listaSegmentos.getLength(); j++) {
Node nodeseg = listaSegmentos.item(cont);
if (nodeseg.getNodeType() == Node.ELEMENT_NODE) {
Element el = (Element) nodeseg;
System.out.println("\nSegment id : " + el.getAttribute("id"));
System.out.println("height : " + el.getElementsByTagName("height").item(0).getTextContent().replaceAll("\"", ""));
System.out.println("number_vehicles : " + el.getElementsByTagName("number_vehicles").item(0).getTextContent().trim());
}
}
}
}
答
的getElementsByTagName("segment_list")
调用将得到所有的segment_list
元素(当前road_section
),你将不得不在第二内环限制在一个迭代,而不是j < listaSegmentos.getLength()
或在所有不使用循环,做这样的事情:
if(listaSegmentos.getLength()>=1) {
Node nodeseg = listaSegmentos.item(0);
if (nodeseg.getNodeType() == Node.ELEMENT_NODE) {
Element el = (Element) nodeseg;
System.out.println("\nSegment id : " + el.getAttribute("id"));
System.out.println("height : " + el.getElementsByTagName("height").item(0).getTextContent().replaceAll("\"", ""));
System.out.println("number_vehicles : " + el.getElementsByTagName("number_vehicles").item(0).getTextContent().trim());
}
}
这同样适用于第1内部循环有其条件设置为i < 1
所以你说我不需要使用item(i).getChildNodes()from(“segment_list”),..我只需要一个循环,并且在使用getElementsByTagName(“segment_list”)之后,还有另一个内循环..就这样? ...抱歉,所有关于这个问题我有点困惑,因为我不会像这样应对 – Henrique
非常感谢!现在我明白你的意思了,做完了;) – Henrique