2015-12-17 22 views
1

我正在尝试使用Java编写XML文件。我想要一个字符串数组填充元素名称,如下所示:String[] elements = {"a", "b", "c", "d"};我想要一个for循环遍历数组,并使第一个元素成为根元素的子元素,第二个元素是子元素的子元素第一,第三个元素的第二个孩子,等如何使用for循环来编写XML文件以将元素追加到以前的元素

的目标是有一个看起来像这样的XML文件:

<root> 
    <a> 
     <b> 
      <c> 
       <d> 
       </d> 
      </c> 
     </b> 
    </a> 
</root> 

这是迄今为止我的Java代码:

package test; 

import java.io.File; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerConfigurationException; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

public class Test {  
    public static void main(String[] args) { 
     try { 
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder builder = factory.newDocumentBuilder(); 
       Document document = builder.newDocument(); 
       Element root = document.createElement("root"); 
       document.appendChild(root); 

       String[] elements = {"a", "b", "c", "d"}; 

       for (int i = 0; i < elements.length; i++) { 
        Element element = document.createElement(elements[i]); 
        root.appendChild(element); 
       } 

       TransformerFactory tFactory = TransformerFactory.newInstance(); 
       Transformer transformer = tFactory.newTransformer(); 
       DOMSource source = new DOMSource(document); 
       StreamResult result = new StreamResult(new File("C:/test.xml")); 

       transformer.transform(source, result); 
      } catch (ParserConfigurationException e) { 
       e.printStackTrace(); 
      } catch (TransformerConfigurationException e) { 
       e.printStackTrace(); 
      } catch (TransformerException e) { 
       e.printStackTrace(); 
     } 
    } 
} 

现在,for-loop只是将数组中的所有元素附加到根,所以XML文件看起来像:

<root> 
    <a/> 
    <b/> 
    <c/> 
    <d/> 
</root> 

我想要一个for-loop,使每个元素的孩子的前一个元素。

+0

在你的for循环,怎么样reaffecting根先前创建的元素? –

回答

2

问题是您将每个XML元素附加到根元素而不是新创建的元素。

你的代码的最小变化是设置root到新创建的元素:

for (int i = 0; i < elements.length; i++) { 
    Element element = document.createElement(elements[i]); 
    root.appendChild(element); 
    root = element; // <-- updates the root element to the newly created element 
} 

这样,每个创建的元素将被追加到最后一个元素。

输出:

<root> 
    <a> 
     <b> 
      <c> 
       <d /> 
      </c> 
     </b> 
    </a> 
</root> 
+0

虽然这可能有效,但我担心将“root”更改为非根元素! –

2

要附加所有元素的根,不要给对方的。试试这个:

String[] elements = {"a", "b", "c", "d"}; 

Element current = root; 

for (int i = 0; i < elements.length; i++) { 
    Element element = document.createElement(elements[i]); 
    current.appendChild(element); 
    current = element; 
} 
0

定义元素分配孩子总是保持之前的一个,像这样:

Element previous = root; //define element to hold previous one 

for (int i = 0; i < elements.length; i++) { 
    Element element = document.createElement(elements[i]); 
    previous.appendChild(element); //assighn current to previous element 
    previous = element; // reassign previous for next round 
} 
相关问题