# Reihenfolge beim xml Datei parsen einhalten?



## Lenzen (15. Jun 2010)

Hallo, ich möchte gern die Reihenfolge der Einträge aus der xml Datei einhalten. Momentan passiert das nicht. Wer kann mir helfen?


```
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
<httpSample ts="1276602591589" lb="Funktion_1" rc="500" rm="Internal Server Error" sc="1" ec="1">
  <responseData class="java.lang.String">&lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt;&lt;Wichtig1</responseData>
</httpSample>
<sample ts="1276602591670" lb="Ausgabe" rc="200" rm="OK" sc="1" ec="0">
  <responseData class="java.lang.String">Funktion_1 - Ergebnis: ID: null!!! 1</responseData>
</sample>

<httpSample ts="1276602592674" lb="Funktion_2" rc="500" rm="Internal Server Error" sc="1" ec="1">
  <responseData class="java.lang.String">&lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt;&lt;Wichtig2</responseData>
</httpSample>
<sample ts="1276602592754" lb="Ausgabe" rc="200" rm="OK" sc="1" ec="0">
  <responseData class="java.lang.String">Funktion_2 - Ergebnis: ID: null!!! 2</responseData>
</sample>

<httpSample ts="1276602593869" lb="Funktion_4" rc="500" rm="Internal Server Error" sc="1" ec="1">
  <responseData class="java.lang.String">&lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt;&lt;Wichtig3</responseData>
</httpSample>
<sample ts="1276602593943" lb="Ausgabe" rc="200" rm="OK" sc="1" ec="0">
  <responseData class="java.lang.String">Funktion_3 - Ergebnis: ID: null!!! 3</responseData>
</sample>

<httpSample ts="1276602595036" lb="Funktion_5" rc="500" rm="Internal Server Error" sc="1" ec="1">
  <responseData class="java.lang.String">&lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt;&lt;Wichtig4</responseData>
</httpSample>
<sample ts="1276602595121" lb="Ausgabe" rc="200" rm="OK" sc="1" ec="0">
  <responseData class="java.lang.String">Funktion_4 - Ergebnis: ID: null!!! 4</responseData>
</sample>

<sample ts="1276602595121" lb="Ausgabe" rc="200" rm="OK" sc="1" ec="0">
  <responseData class="java.lang.String">Funktion_5 - Ergebnis: ID: null!!! 5</responseData>
</sample>
<sample ts="1276602595121" lb="Ausgabe" rc="200" rm="OK" sc="1" ec="0">
  <responseData class="java.lang.String">Funktion_6 - Ergebnis: ID: null!!! 6</responseData>
</sample>

</testResults>
```


```
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Zeitstempel_neu { 
  
  static String fileString = "/tmp/test.xml";
  

  public static void nodeElements(NodeList nodeLst){    
    for (int s = 0; s < nodeLst.getLength(); s++) {
      Node fstNode = nodeLst.item(s);        
      if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
        Element fstElmnt = (Element) fstNode;        
        NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("responseData");
        Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
        NodeList fstNm = fstNmElmnt.getChildNodes();  
 
        String zeitstempel = fstNode.getAttributes().item(5).getNodeValue();
        String funktion = fstNode.getAttributes().item(1).getNodeValue();
        String fehlerCode = fstNode.getAttributes().item(3).getNodeValue();
        String fehlerNachricht = fstNode.getAttributes().item(2).getNodeValue();
        String proben = fstNode.getAttributes().item(4).getNodeValue();
        String fehler = fstNode.getAttributes().item(0).getNodeValue();
        
        //System.out.println("TagName:" + fstNode.getNodeName());
 
        if((fstNm.item(0)) == null){
          System.out.println(s+" "+zeitstempel + ","+ funktion +","+ fehlerCode +","+ fehlerNachricht + ","+ proben + "," + fehler + ","+ "null");          
        }else{
          System.out.println(s+" "+zeitstempel + ","+ funktion +","+ fehlerCode +","+ fehlerNachricht + ","+ proben + "," + fehler + ","+ ((Node) fstNm.item(0)).getNodeValue());          
        }
      }

    }     
  }
  
  
  public static void parseXml(){
    Document doc = null;
    
    try {       
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();         
      File file = new File(fileString);
      doc = db.parse(file); 
      doc.getDocumentElement().normalize();
      //System.out.println("Root element " + doc.getDocumentElement().getNodeName());
      
      NodeList nodeLst = doc.getElementsByTagName("httpSample");
      //System.out.println("Information of all samples1");
      nodeElements(nodeLst);
      
      NodeList nodeLst1 = doc.getElementsByTagName("sample");
      //System.out.println("Information of all samples2");
      nodeElements(nodeLst1);
            
      } catch (Exception e) {        
        e.printStackTrace();
      }   
  }

  public static void main(String[] args) {     
    parseXml();    
  }
}
```

Die Ausgabe momentan sieht so aus:

```
0 1276602591589,Funktion_1,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig1
1 1276602592674,Funktion_2,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig2
2 1276602593869,Funktion_4,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig3
3 1276602595036,Funktion_5,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig4
0 1276602591670,Ausgabe,OK,200,1,0,Funktion_1 - Ergebnis: ID: null!!! 1
1 1276602592754,Ausgabe,OK,200,1,0,Funktion_2 - Ergebnis: ID: null!!! 2
2 1276602593943,Ausgabe,OK,200,1,0,Funktion_3 - Ergebnis: ID: null!!! 3
3 1276602595121,Ausgabe,OK,200,1,0,Funktion_4 - Ergebnis: ID: null!!! 4
4 1276602595121,Ausgabe,OK,200,1,0,Funktion_5 - Ergebnis: ID: null!!! 5
5 1276602595121,Ausgabe,OK,200,1,0,Funktion_6 - Ergebnis: ID: null!!! 6
```


----------



## asfasfasfasfasf (15. Jun 2010)

Wieso, die Reihenfolge ist doch richtig, oder überseh ich was?

PS: Das ist natürlich clever, Standardbenutzername 'Gast' wird nicht akzeptiert (und fast jedes Captcha ist unlesbar)....


> Dieser Benutzername ist bereits vergeben oder erfüllt nicht die vom Administrator festgelegten Richtlinien.


----------



## Lenzen (15. Jun 2010)

Die Ausgabe soll so aussehen. (Die Nummerierung vorn ist nicht wichtig. Deswegen hab ich sie hier weg gelassen)

```
1276602591589,Funktion_1,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig1
1276602591670,Ausgabe,OK,200,1,0,Funktion_1 - Ergebnis: ID: null!!! 1
1276602592674,Funktion_2,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig2
1276602592754,Ausgabe,OK,200,1,0,Funktion_2 - Ergebnis: ID: null!!! 2
1276602593869,Funktion_4,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig3
1276602593943,Ausgabe,OK,200,1,0,Funktion_3 - Ergebnis: ID: null!!! 3
1276602595036,Funktion_5,Internal Server Error,500,1,1,<?xml version='1.0' encoding='UTF-8'?><Wichtig4
1276602595121,Ausgabe,OK,200,1,0,Funktion_4 - Ergebnis: ID: null!!! 4
1276602595121,Ausgabe,OK,200,1,0,Funktion_5 - Ergebnis: ID: null!!! 5
1276602595121,Ausgabe,OK,200,1,0,Funktion_6 - Ergebnis: ID: null!!! 6
```


----------



## asfasfasfasfasf (15. Jun 2010)

Du gehst ja auch zuerst die httpSample/responseData durch und danach alle sample/responseData, natürlich ist die Ausgabe dann identisch mit der Reihenfolge wie du sich durchiterierst. Warum gehst du nicht direkt alle */responseData durch wenn du sie in der natürlichen Reihenfolge willst (sorry für die pseudo-xpaths)


----------



## Lenzen (15. Jun 2010)

Leider wird der * nicht akzeptiert und es folgt eine NullPointerException.


```
NodeList nodeLst = doc.getElementsByTagName("*");
```


----------



## asfasfasfasfasf (15. Jun 2010)

Hä, du willst doch anscheinend 
NodeList nodeLst = doc.getElementsByTagName("responseData");
?


----------



## Lenzen (15. Jun 2010)

Das war auch schon eine meine Idee. Nur wenn ich das so mache wie du schreibst, dann tritt an der Stelle:

```
NodeList fstNm = fstNmElmnt.getChildNodes();
```
eine NullPointerException auf.


----------



## asfasfasfasfasf (15. Jun 2010)

Lenzen hat gesagt.:


> Das war auch schon eine meine Idee. Nur wenn ich das so mache wie du schreibst, dann tritt an der Stelle:
> 
> ```
> NodeList fstNm = fstNmElmnt.getChildNodes();
> ...



Keine Ahnung was die Zeile machen soll oder was "fstNm(Elmnt)" sein soll, aber dass du deinen Code entsprechend ändern musst ist natürlich klar. Bei der Gelegenheit solltest du auch gleich mal die in der Gegend stehenden item(n) aufrufe entfernen (besonders bei den Attributen), denn sonst fliegt der dir morgen eh wieder auf die Nase.


----------



## Lenzen (16. Jun 2010)

Mittlerweile habe ich das Programm soweit fertig. Ich nehme das oberste Element und gehe dann jedes Kind durch und hole mir die Daten vom Kind. Dafür habe ich eine zweite for Schleife in die erste aufgenommen.

```
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Zeitstempel_neu { 
  
  static String fileString = "/tmp/test.xml";
  

  public static void nodeElements(NodeList nodeLst) {

    for (int s = 0; s < nodeLst.getLength(); s++) {
      Node fstNode = nodeLst.item(s);
      Element fstElmnt = (Element) fstNode;
      NodeList fstNmElmntLst = fstElmnt.getChildNodes();
      //System.out.println(fstNmElmntLst.item(s).getNextSibling().getNodeName());

      for (int t = 0; t < fstNmElmntLst.getLength(); t++) {
        Node fstNodeNew = fstNmElmntLst.item(t);

        if (fstNodeNew.getNodeType() == Node.ELEMENT_NODE) {
          Element fstElmntNew = (Element) fstNodeNew;
          NodeList fstNmElmntLstNew = fstElmntNew.getElementsByTagName("responseData");
          Element fstNmElmntNew = (Element) fstNmElmntLstNew.item(0);
          NodeList fstNm = fstNmElmntNew.getChildNodes();
          
          String zeitstempel = fstNodeNew.getAttributes().item(5).getNodeValue();
          String funktion = fstNodeNew.getAttributes().item(1).getNodeValue();
          String fehlerCode = fstNodeNew.getAttributes().item(3).getNodeValue();
          String fehlerNachricht = fstNodeNew.getAttributes().item(2).getNodeValue();
          String proben = fstNodeNew.getAttributes().item(4).getNodeValue();
          String fehler = fstNodeNew.getAttributes().item(0).getNodeValue();

          // System.out.println("TagName:" + fstNode.getNodeName());

          if ((fstNm.item(0)) == null) {
            System.out.println(s + " " + zeitstempel + "," + funktion + "," + fehlerCode + "," + fehlerNachricht + "," + proben + "," + fehler + "," + "null");
          } else {
            System.out.println(s + " " + zeitstempel + "," + funktion + "," + fehlerCode + "," + fehlerNachricht + "," + proben + "," + fehler + "," + ((Node) fstNm.item(0)).getNodeValue());
          }
        }
      }

    }
  }
  
  
  public static void parseXml(){
    Document doc = null;
    
    try {       
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();         
      File file = new File(fileString);
      doc = db.parse(file); 
      doc.getDocumentElement().normalize();
      //System.out.println("Root element " + doc.getDocumentElement().getNodeName());
      
      NodeList nodeLst = doc.getElementsByTagName("testResults");
      nodeElements(nodeLst);
         
      } catch (Exception e) {        
        e.printStackTrace();
      }   
  }
  public static void main(String[] args) {     
    parseXml();    
  }
}
```


----------

