0

XML を読み取り、いくつかの属性を変更しています。次に、それを XML としてファイルに書き戻すと、空のファイルが返されます。ノードを変更しなければ問題なく動作します。私が間違っていること、アドバイスをお願いします。

DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                        .newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(origDrXML);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("log");
for (int i = 0; i < nodes.getLength(); i++) {
    NodeList children = nodes.item(i).getChildNodes();
int len = children.getLength();
for (int j = 0; j <= children.getLength(); j++) {
    if (children.item(j).getNodeName().equalsIgnoreCase("directory"))
        children.item(j).setTextContent("D:\\Logs");
    }
 } // End of Childrens of <log>
} // End of <log> Tag */
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = result.getWriter().toString();
System.out.println(xmlString);
4

3 に答える 3

1

ヌルチェックで試すことはできますか?

for (int j = 0; j <= children.getLength(); j++) {
    if(children.item(j) != null ) {
            if (children.item(j).getNodeName().equalsIgnoreCase("directory"))
                    children.item(j).setTextContent("D:\\Logs");
    }
}

これは私のために働きます!

于 2013-03-13T17:47:02.733 に答える
0

の代わりにDOMLSSerializerメカニズムを使用してみてくださいTransformer。これをすべて置き換えます:

Transformer transformer = TransformerFactory.newInstance().newTransformer();
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = result.getWriter().toString();

これとともに

LSSerializer ser =
    ((DOMImplementationLS)doc.getImplementation()).createLSSerializer();
String xmlString = ser.writeToString(doc);
于 2013-03-13T17:38:22.363 に答える
0

電話writer.flush()する前に電話してみましたwriter.toString()か?

于 2013-03-13T17:25:09.450 に答える