XML生成,元素添加不正确

时间:2016-05-19 09:36:59

标签: java xml xml-parsing nodes nodelist

我正在编写一个在循环中在同一个根元素下添加少量元素的方法但是当我打开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();   
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

代码没有任何问题,因为它产生了等效的XML。

缩进使人眼更容易阅读XML,但它并没有改变XML的含义。第一个XML中的所有<Step>元素都是<testDetails>的子元素,就像第二个XML中的<Step>个元素一样。 XML的观点没有区别。