簡體   English   中英

如何使用for循環編寫XML文件以將元素追加到上一個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM