2016-06-29 14 views
1

Das ist mein Teil von XML-DateiParsen von XML in Java

<IOStatusSummary> 
     <iostatus_interval_value> 
       <count>0</count> 
       <iostatusvalue datainterval="2016-01-16 15:45:30">1.0</iostatusvalue> 
       <iostatusvalue datainterval="2016-01-16 19:47:29">0.0</iostatusvalue> 
       <iostatusvalue datainterval="2016-05-16 13:01:07">1.0</iostatusvalue> 
       <iostatusvalue datainterval="2016-05-16 18:51:33">0.0</iostatusvalue> 
       <iostatusvalue datainterval="2016-05-27 16:45:50">1.0</iostatusvalue> 
       <iostatusvalue datainterval="2016-05-27 20:56:00">0.0</iostatusvalue> 
       <iostatusvalue datainterval="2016-06-10 10:21:28">1.0</iostatusvalue> 
       <iostatusvalue datainterval="2016-06-10 20:01:17">0.0</iostatusvalue> 
     </iostatus_interval_value> 
</IOStatusSummary> 

, was ich zu tun versuche, ist

DocumentBuilder db1 = DocumentBuilder db1 = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    InputSource is1 = new InputSource(); 
    is1.setCharacterStream(new StringReader(xmlResult)); 
    Document doc1 = db1.parse(is1); 

    NodeList nList_interval=doc1.getElementsByTagName("iostatus_interval_value");   

    List on = new ArrayList(); 
    List off = new ArrayList(); 

     for (int =0; i < nList_interval.getLenght(); i ++){ 

     Node currentItem2= nList_interval.item(iter); 

     Element element2 = (Element) currentItem2; 

     String iostatusvalue = element2.getElementsByTagName("iostatusvalue").item(i).getTextContent(); 

     if(iostatusvalue.equals("1.0")) 
     { 
on.add(element1.getAttribute("datainterval")));               

     } 


     if(iostatusvalue.equals("0.0")) 
     {  

    off.add("element1.getAttribute("datainterval"))"); 

     } 

     } 

dann i Ich drucke erwarten bin

auf = {2016-01-16 15:45:30 ", 2016-05-16 13:01:07, 2016-05-27 16: 45: 50,2016-06-10 10:21:28}

aus = {2016-01-16 19:47:29, 2016-05-16 18:51:33, 2016-05-27 20:56:00, 2016-06-10 20:01:17}

Ich bekomme meine Liste sind leer und über Xml ist nicht vollständig Xml sein Teil von Xml.

Aber ich bekomme nicht, was ich erwarte ich denke, dass ich irgendwo einen logischen Fehler mache, weil ich neu darin bin.

Vielen Dank für das Lesen meiner Frage.

+1

Was bekommen Sie? – Jens

+1

Ihr XML ist ungültig. Es beginnt mit einem schließenden Tag – Jens

+0

Das ist mein Tippfehler –

Antwort

1

Try this:

String xml = "<IOStatusSummary><iostatus_interval_value><count>0</count><iostatusvalue datainterval=\"2016-01-16 15:45:30\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-01-16 19:47:29\">0.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-16 13:01:07\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-16 18:51:33\">0.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-27 16:45:50\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-27 20:56:00\">0.0</iostatusvalue><iostatusvalue datainterval=\"2016-06-10 10:21:28\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-06-10 20:01:17\">0.0</iostatusvalue></iostatus_interval_value></IOStatusSummary>"; 
    ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes()); 
    DocumentBuilder db1 = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    Document doc1 = db1.parse(bais); 

    NodeList nList_interval = doc1.getElementsByTagName("iostatus_interval_value").item(0).getChildNodes(); 

    List<String> on = new ArrayList<String>(); 
    List<String> off = new ArrayList<String>(); 

    for (int i = 0; i < nList_interval.getLength(); i++) { 
     Element element = (Element) nList_interval.item(i); 
     if (element.getTagName().equals("iostatusvalue")) { 
      String text = element.getTextContent(); 
      String interval = element.getAttribute("datainterval"); 
      if (text.equals("1.0")) { 
       on.add(interval); 
      } 
      if (text.equals("0.0")) { 
       off.add(interval); 
      } 
     } 
    } 
    System.out.println(on); 
    System.out.println(off); 

Der Hauptunterschied in diesem Beispiel ist diese Zeile:

NodeList nList_interval = doc1.getElementsByTagName("iostatus_interval_value").item(0).getChildNodes(); 

Was dies bedeutet, ist eine Liste aller untergeordneten Elemente des ersten iostatus_interval_value Element zu erhalten.