【发布时间】:2014-07-05 18:28:03
【问题描述】:
我到处搜索这个问题,但无法弄清楚发生了什么。
我要做的是将一些内容附加到 XML 文件的末尾,同时检查节点以确保其中没有该节点。因此,如果我想添加到 XML 文件但已经存在,则不会写入。
我遇到的问题是它可以很好地附加到末尾,但是无论节点是否存在,它都会执行此操作。因此,如果我运行 5 次,我最终会让它附加相同的东西五次而不是一次。我的代码如下:
public void writeSettingsFile(String file, String keyIn, String contentIn)
{
try {
String filepath = file;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setIgnoringComments(true);
docFactory.setIgnoringElementContentWhitespace(true);
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
Node settings = doc.getElementsByTagName("Settings").item(0);
NodeList list = settings.getChildNodes();
Element newSetting = doc.createElement(keyIn);
newSetting.appendChild(doc.createTextNode(contentIn));
for (int i = 0; i < list.getLength(); i++)
{
Node node = list.item(i);
System.out.println(i);
System.out.println(node.getNodeName());
if (!keyIn.equals(node.getNodeName()) && !hasWhiteSpace(node))
{
settings.appendChild(newSetting);
System.out.println("This should be written");
System.out.println("Not written");
}
else
{
System.out.println("Not written");
}
}
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
}
}
【问题讨论】: