【发布时间】:2014-11-28 15:41:46
【问题描述】:
我遇到了一个奇怪的问题
很快,这是我想添加一个新的person 节点的 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" />
</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/><
即就像在第一种情况下,它不能保存超出一定的边界,
我无法理解这个问题, 在我之前用过的pad上,效果很好,现在我用的是索尼Xperia
编辑。尝试保存到另一个(新的)XML 文件中并且它可以工作,但仍然无法理解为什么 DOM 树没有完全保存到原始文件中
编辑2。有没有搞错。当我将新的(有效的)XML 文件重命名回原始文件时,它会像原始文件一样损坏。我很沮丧
【问题讨论】:
-
看起来像流刷新问题,尝试显式刷新输出流并关闭它。