2015-12-14 88 views
1

我想讀一個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()); 

      } 
     } 
    } 
} 

回答

2

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

+0

所以你說我不需要使用item(i).getChildNodes()from(「segment_list」),..我只需要一個循環,並且在使用getElementsByTagName(「segment_list」)之後,還有另一個內循環..就這樣? ...抱歉,所有關於這個問題我有點困惑,因爲我不會像這樣應對 – Henrique

+0

非常感謝!現在我明白你的意思了,做完了;) – Henrique