HIERARCHY_REQUEST_ERR при попытке добавить элементы в XML-файл в цикле for

Как видно из заголовка, я пытаюсь добавить элементы в документ XML с помощью цикла for. у меня естьArrayList из названных строкnames что я хочу перебрать, и для каждого имени создайте элемент с атрибутомname и с ребенком что имеет атрибуты,idtimedate, а также .project

К сожалению, если вы прокрутите вниз в коде ниже доcreateDoc() метод, когда я пытаюсь позвонитьdoc.appendChild(user)Я получаю следующую ошибку:

Exception in thread "main" org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. 
at org.apache.xerces.dom.CoreDocumentImpl.insertBefore(Unknown Source)
at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source)
at test.XMLwriter.createDoc(XMLwriter.java:131)
at test.XMLwriter.(XMLwriter.java:116)
at test.TestRunner.main(TestRunner.java:33)

Я рассмотрел несколько вопросов о стековом потоке, которые имеют ту же ошибку, но все они, кажется, возникли при совершенно разных обстоятельствах по отношению к моему. Мое предположение состоит в том, что эта ошибка связана с тем, что я пытаюсь создать слишком много родительских элементов на одном иерархическом уровне, но я не уверен, и у меня почти нет опыта работы с xml.

Вот код:}

public class XMLwriter {
private ArrayList names;
private Document doc;
private Random rand;
private ArrayList users;

public XMLwriter() throws ParserConfigurationException, TransformerException{

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    doc = docBuilder.newDocument();

    rand = new Random();
    users = new ArrayList();
    names = new ArrayList();

    names.add("Ralph Wiggum");names.add("Mr. Hanky");names.add("Bulbasaur");
    names.add("Tyroil Smoochie Wallace");names.add("Scooby Doo");names.add("Neville Longbottom");
    names.add("Jabba the Hutt");names.add("Silky Johnson");names.add("Master Chief");
    names.add("Frodo Baggins");names.add("Clayton Bigsby");names.add("John Snow");
    names.add("Eric Cartman");names.add("Leoz Maxwell Jilliumz");names.add("Aslan");

    createDoc();
    generateFile();

}

public void createDoc(){
    for(int k = 0; k < names.size(); k++)
    {
        users.add(doc.createElement("user"));
    }
    for (int x = 0; x < names.size(); x++){

        //create the elements
        Element record = doc.createElement("record");
        users.get(x).appendChild(record);
        doc.appendChild(users.get(x));//The line that is throwing the error

        //create the attributes
        Attr name = doc.createAttribute("name");
        Attr date = doc.createAttribute("date");
        Attr project = doc.createAttribute("project");
        Attr time = doc.createAttribute("time");
        Attr id = doc.createAttribute("id");

        //give all of the attributes values
        name.setValue(names.get(x));
        date.setValue(new Date().toString());
        project.setValue("Project" + (rand.nextDouble() * 1000));
        time.setValue("" + rand.nextInt(10));
        id.setValue("" + (rand.nextDouble() * 10000));

        //assign the attributes to the elements
        users.get(x).setAttributeNode(name);
        record.setAttributeNode(date);
        record.setAttributeNode(project);
        record.setAttributeNode(time);
        record.setAttributeNode(id);


    }
}

public void generateFile() throws TransformerException{
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(new File("C:\\Users\\sweidenkopf\\workspace\\test\\testxml.xml"));

    // Output to console for testing
    // StreamResult result = new StreamResult(System.out);
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
    transformer.transform(source, result);
}

Я написал этот код как своего рода подтверждение концепции, потому что мне в конечном итоге придется фактически выполнить аналогичную операцию, где у меня будет список объектов, каждый из которых я должен добавить в XML-файл, разделив объект на составляющую. части сget методы.

Может кто-нибудь помочь мне решить эту ошибку?

Ответы на вопрос(1)

Ваш ответ на вопрос