я столкнулся со странным вопросомне может вставить новый узел XML с DOM парсер
Короче, вот XML, который я хотел бы, чтобы добавить новый person
узлу
<persons>
<person name="name1" surname="surname1" />
<person name="name2" surname="surname2" />
<person name="name3" surname="surname3" />
<person name="name4" surname="surname4" />
<person name="name5" surname="surname5" />
</persons>
Вот мой Android код:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(personsFile);
doc.getDocumentElement().normalize();
Element persons = doc.getDocumentElement();
Element personNode = doc.createElement("person");
personNode.setAttribute("name", "name6");
personNode.setAttribute("surname", "surname6");
persons.appendChild(personNode);
Transformer tf = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(personsFile);
tf.transform(source, result);
Но новый узел вставлен не полностью, я получаю эту
<persons>
<person name="name1" surname="surname1" />
<person name="name2" surname="surname2" />
<person name="name3" surname="surname3" />
<person name="name4" surname="surname4" />
<person name="name5" surname="surname5" />
<person na
Для этой версии кода (не имеет атрибутов установлен):
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(personsFile);
doc.getDocumentElement().normalize();
Element persons = doc.getDocumentElement();
Element personNode = doc.createElement("person");
//personNode.setAttribute("name", "name6");
//personNode.setAttribute("surname", "surname6");
persons.appendChild(personNode);
Transformer tf = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(personsFile);
tf.transform(source, result);
Я получаю XML
<persons>
<person name="name1" surname="surname1" />
<person name="name2" surname="surname2" />
<person name="name3" surname="surname3" />
<person name="name4" surname="surname4" />
<person name="name5" surname="surname5" />
<person/><
т.е. так же, как и в первом случае, он не может сохранить за пределы определенная граница,
Я не могу понять проблему, На пэде я использовал ранее, это отлично работало, теперь я использую Sony Xperia
EDIT. Попробовал сохранить в другой (новый) XML-файл, и он сработал, но до сих пор не может понять, почему дерево DOM полностью не сохранено в исходном файле.
EDIT2. Какого черта. когда я переименую новый (действительный) XML-файл обратно в исходный файл, он будет поврежден так же, как и исходный файл. Я полностью расстроен
Похож на проблему с промывкой потока, попробуйте очистить поток и явно закрыть его. – Ironluca