2016-05-19 11 views
0

ループ内の同じルート要素の下にいくつかの要素を追加する方法を書いていますが、XMLファイルを開くと最初の要素が正しく追加され、主な要素の下に。XML生成、要素が正しく追加されていません

これは私の方法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); 

これは私の出力XMLです:

<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> 

これは私が達成したいものです。

<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> 

私は私の方法を実行しますループ:

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

どうしたらいいですか?

+0

インデントは、XMLの意味を変更しません。最初のXMLのすべての 'Step'要素は、2番目のXMLの' Step'要素と同様に、 'testDetails'の子です。 XMLの視点に違いはありません.. – har07

+0

ありがとう! :) –

+0

あなたは大歓迎です!この質問を適切に閉じられるように、以下の回答を投稿してください。ありがとう – har07

答えて

1

同等のXMLを生成するので、コードに問題はありません。

インデントを使用すると、人間の目でXMLを読みやすくなりますが、XMLの意味はまったく変わりません。最初のXMLのすべての<Step>要素は、の子であり、2番目のXMLの要素<Step>と同じです。 XMLの視点に違いはありません。

関連する問題