HIERARCHY_REQUEST_ERR tout en essayant d'ajouter des éléments de fichier xml dans une boucle for

Comme le suggère le titre, je suis en train d'ajouter des éléments d'un document xml à l'aide d'une boucle for.
J'ai un ArrayList de cordes appelé names que je souhaite parcourir, et pour chaque nom créer un <user> élément avec l'attribut name et avec un enfant <record> qui a les attributs id, time, date, et project.

Malheureusement, si vous faites défiler vers le bas dans le code ci-dessous pour les createDoc() méthode, quand j'essaie d'appeler doc.appendChild(user), j'obtiens l'erreur suivante:

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.<init>(XMLwriter.java:116)
at test.TestRunner.main(TestRunner.java:33)

J'ai regardé quelques questions sur stackoverflow qui ont la même erreur, mais ils semblent tous avoir eu lieu sous des circonstances complètement différentes à l'égard de la mine. Ma meilleure supposition est que cette erreur a à voir avec le fait que je suis en train de créer trop d'éléments parents au même niveau hiérarchique, mais je ne suis pas sûr et je n'ai presque pas d'expérience avec xml à tous.

Voici le code:

public class XMLwriter {
private ArrayList<String> names;
private Document doc;
private Random rand;
private ArrayList<Element> users;
public XMLwriter() throws ParserConfigurationException, TransformerException{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
doc = docBuilder.newDocument();
rand = new Random();
users = new ArrayList<Element>();
names = new ArrayList<String>();
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);
}

}

J'ai écrit ce code comme une sorte de preuve de concept, car je vais finir par avoir à en effectuer une opération similaire, où je vais avoir une liste d'objets, chacun de qui je dois ajouter un fichier xml par la séparation de l'objet en ses parties constituantes avec get méthodes.

Quelqu'un peut-il m'aider à résoudre cette erreur?

InformationsquelleAutor scottyseus | 2013-07-25