XML只允许一个根元素

时间:2015-07-30 12:44:13

标签: java xml dom

尝试添加新的Element时,我在此代码中收到错误。

try {
                DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
                Document doc = docBuilder.parse(openFileInput(filename));
                Node task = doc.getElementsByTagName("task").item(position);
                NodeList list = task.getChildNodes();

                for(int i = 0; i<list.getLength();i++){
                    Node node = list.item(i);

                    if("task_note".equals(node.getNodeName())){
                        node.setTextContent(taskItems.get(position).get("task_note"));
                    }
                }

                Node taskNote = doc.createElement("task_image");
                taskNote.setTextContent(taskItems.get(position).get("task_image"));
                doc.appendChild(taskNote);

                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                //DOMSource wandelt Zeichen wie < , > , & , "" automatisch in XML Sprache um
                DOMSource source = new DOMSource(doc);
                StreamResult result = new StreamResult(openFileOutput(filename,Context.MODE_PRIVATE));
                transformer.transform(source,result);
            } catch (ParserConfigurationException | IOException | SAXException | TransformerException e) {
                e.printStackTrace();
            }

这是错误:

Caused by: org.w3c.dom.DOMException: Only one root element 
        at de.appy.laluna.app.TasksList.onActivityResult(TasksList.java:161)

在for循环中,我编辑task_note元素。这有效,直到我在for循环后创建一个新的Element。 这会导致错误。

有什么问题,如何解决问题?

亲切的问候

1 个答案:

答案 0 :(得分:2)

XML文档中只能包含1个根元素。

您好像在这里加载现有的XML文档:

Document doc = docBuilder.parse(openFileInput(filename));

从此文档中获取现有节点:

Node task = doc.getElementsByTagName("KEVOX_task").item(position);

所以,我假设它已经有了一个根元素。由于您从该文档中获取了一个元素KEVOX_task,因此它至少包含在根元素中。

稍后,您尝试附加到文档本身:

doc.appendChild(taskNote);

这会添加多个根元素。

您可能想要做的是添加到您之前选择的task元素:

task.appendChild(taskNote);