2016-05-19 22 views
0

Ich schreibe eine Methode, die ein paar Elemente unter dem gleichen Wurzelelement in einer Schleife hinzufügt, aber wenn ich die XML-Datei öffne, sieht es so aus, als wäre das erste Element korrekt hinzugefügt und die anderen hinzugefügt unter Hauptelement.XML-Generierung, Element wird nicht korrekt hinzugefügt

Dies ist meine Methode addStepElement():

DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder(); 
     Document document = documentBuilder.parse(file); 
     document.getDocumentElement().normalize(); 

     Element rootElement = null;  
     NodeList findRootElementList = document.getElementsByTagName("testDetails"); 
     for(int iterator = 0; iterator < findRootElementList.getLength(); iterator++) { 
      Node node = findRootElementList.item(iterator); 
      if(node.getNodeName().equals("testDetails")) { 
       rootElement = (Element)node; 
      } 
     } 


     Element step = document.createElement("Step"); 
     rootElement.appendChild(step); 
     step.setAttribute("Step", "className"); 
     step.setAttribute("result", "PASS"); 
     step.setAttribute("screenshot", "file.jpg"); 
     step.setAttribute("input", "email"); 
     step.setAttribute("element", "submit"); 


     Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
     transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
     transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
     transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "5"); 
     DOMSource source = new DOMSource(document); 
     StreamResult result = new StreamResult(new File(file.getAbsolutePath())); 
     transformer.transform(source, result); 

Das ist mein XML-Ausgabe:

<Test> 
    <testDetails date="19-05-2016" testName="Test" time="11:24:14"> 
      <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
    <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
    <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
    <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
    <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
    </testDetails> 
</Test> 

Dies ist, was ich erreichen will:

<Test> 
    <testDetails date="19-05-2016" testName="Test" time="11:24:14"> 
      <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
      <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
      <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
      <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
      <Step Step="className" element="submit" input="email" result="PASS" screenshot="file.jpg"/> 
    </testDetails> 
</Test> 

ich meine Methode zu tun in eine Schleife:

for(int i = 0; i < 5; i++) { 
    addStepElement(); 
} 

Was mache ich falsch?

+0

Einrückung ändert nicht die Bedeutung Ihres XML. Alle "Step" -Elemente im ersten XML sind Kinder von 'testDetails', genau wie diese' Step' -Elemente im 2. XML. Kein Unterschied in der XML-Sicht .. – har07

+0

vielen Dank !! :) –

+0

Gern geschehen! Posted eine Antwort unten, so kann diese Frage angemessen geschlossen werden. Vielen Dank – har07

Antwort

1

Es ist nichts falsch mit dem Code, da es eine äquivalente XML erzeugt.

Durch die Einrückung wird XML für das menschliche Auge leichter lesbar, ändert jedoch nichts an der Bedeutung von XML. Alle <Step> Elemente in der ersten XML sind Kinder von <testDetails> genau wie diese <Step> Elemente in der 2. XML. Kein Unterschied in der XML-Sicht.