2014-09-29 85 views
-1

下面是一个用于解析伴随XML文件的程序。用于解析复杂XML文件的Java代码

问题:有两个通道ID,但是我的代码的输出只输出一个。我期望的输出是:

当前单元:检测器报告
探测器ID:I-74 NB从第12大道到第七大道
状态:操作

泳道-ID:1
Lane - ID:2

当前代码仍在最后一行输出1。

import org.w3c.dom.*; 
import javax.xml.parsers.*; 
import java.io.*; 

public class FinalTrial { 
    public static void main(String argv[]) { 
     try { 
      File fXmlFile = new File("workFile_09282014 22-10-34c.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(fXmlFile); 

      doc.getDocumentElement().normalize(); 
      System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 
      NodeList nList = doc.getElementsByTagName("detector-report"); 
      System.out.println("----------------------------"); 

      for (int temp = 0; temp < nList.getLength(); temp++) { 
       Node nNode = nList.item(temp); 
       System.out.println("\nCurrent Element :" + nNode.getNodeName()); 

       if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
        Element eElement = (Element) nNode; 
        System.out.println("Detector ID : " + eElement.getElementsByTagName("detector-id").item(0).getTextContent()); 
        System.out.println("Status : " + eElement.getElementsByTagName("status").item(0).getTextContent()); 
        NodeList lanes = eElement.getElementsByTagName("lane"); 
        System.out.println(lanes.getLength()); 
        for (int j = 0; j<lanes.getLength(); j++) { 
         Element lane = (Element) lanes.item(0); 
         System.out.println("Lane-ID : " + lane.getElementsByTagName("lane-id").item(0).getTextContent()); 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

下面是附带的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<trafficDetectorData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.dummy-temp-address" xmlns:lrms="http://www.dummy-lrms-address" xsi:schemaLocation="http://www.dummy-temp-address C:\temp\test\Detectors.xsd"> 
    <detector-report> 
     <detector-id>I-74 NB from Ave of the Cities t</detector-id> 
     <status>operational</status> 
     <lane> 
      <lane-id>1</lane-id> 
      <count>1</count> 
      <volume>1</volume> 
      <occupancy>0</occupancy> 
      <speed>122</speed> 
      <classes> 
      <class> 
       <class-id>Small</class-id> 
       <count>1</count> 
       <volume>1</volume> 
      </class> 
      <class> 
       <class-id>Medium</class-id> 
      </class> 
      <class> 
       <class-id>Large</class-id> 
      </class> 
      </classes> 
     </lane> 
     <lane> 
      <lane-id>2</lane-id> 
      <occupancy>0</occupancy> 
      <speed>137</speed> 
      <classes> 
      <class> 
       <class-id>Small</class-id> 
      </class> 
      <class> 
       <class-id>Medium</class-id> 
      </class> 
      <class> 
       <class-id>Large</class-id> 
      </class> 
      </classes> 
     </lane> 
    </detector-report> 
    <detector-report> 
     <detector-id>I-74 NB from 12th Ave to 7th Ave</detector-id> 
     <status>operational</status> 
     <lane> 
      <lane-id>1</lane-id> 
      <count>3</count> 
      <volume>3</volume> 
      <occupancy>3</occupancy> 
      <speed>100</speed> 
      <classes> 
      <class> 
       <class-id>Small</class-id> 
       <count>3</count> 
       <volume>3</volume> 
      </class> 
      <class> 
       <class-id>Medium</class-id> 
      </class> 
      <class> 
       <class-id>Large</class-id> 
      </class> 
      </classes> 
     </lane> 
     <lane> 
      <lane-id>2</lane-id> 
      <count>4</count> 
      <volume>4</volume> 
      <occupancy>3</occupancy> 
      <speed>116</speed> 
      <classes> 
      <class> 
       <class-id>Small</class-id> 
       <count>4</count> 
       <volume>4</volume> 
      </class> 
      <class> 
       <class-id>Medium</class-id> 
      </class> 
      <class> 
       <class-id>Large</class-id> 
      </class> 
      </classes> 
     </lane> 
    </detector-report> 
</trafficDetectorData> 
+2

为了得到答案,您必须先问一个问题。 – 2014-09-29 15:09:45

+1

您是否尝试阅读jaxb,dom对象和sax对象? – 2014-09-29 15:09:45

+1

http://stackoverflow.com/help/how-to-ask – Mihai 2014-09-29 15:11:17

回答

2

我敦促大多数开发人员使用的XML文档处理建立库,以避免错误,如不正确转义属性值。

Java的内置XML解析库工作得很好(org.w3c.dom.Document等)。