尝试添加新的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
。
这会导致错误。
有什么问题,如何解决问题?
亲切的问候
答案 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);