[英]How to write XML file using for loop to append elements to previous element
我正在嘗試用Java編寫XML文件。 我想要一個用元素名稱填充的字符串數組,如下所示: String[] elements = {"a", "b", "c", "d"};
我想要一個for循環,該循環將遍歷數組並使第一個元素成為根元素的孩子,第二個元素成為第一個元素的孩子,第三個元素成為第二個元素的孩子,依此類推。
目標是要有一個如下所示的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循環僅將數組中的所有元素附加到根,因此XML文件如下所示:
<root>
<a/>
<b/>
<c/>
<d/>
</root>
我想要一個for循環,使每個元素成為先前元素的子元素。
問題是您要將每個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>
您將所有元素附加到根,而不是彼此。 嘗試這個:
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;
}
定義一個元素來分配始終保留前一個元素的子元素,如下所示:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.