Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修改后无法写回XML_Java_Xml_Xml Parsing - Fatal编程技术网

Java 修改后无法写回XML

Java 修改后无法写回XML,java,xml,xml-parsing,Java,Xml,Xml Parsing,我正在读取XML并更改一些属性。然后我将它写回XML文件,它返回一个空白文件。如果我不修改节点,它可以正常工作。我做错了什么,请指教 DocumentBuilderFactory dbFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.pa

我正在读取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);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(origDrXML);
doc.getDocumentElement().normalize();
NodeList节点=doc.getElementsByTagName(“日志”);
对于(int i=0;i对于(int j=0;j在调用
writer.toString()
之前,您是否尝试过调用
writer.flush()

您可以尝试使用DOM
LSSerializer
机制,而不是
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);

你能用空支票试试吗

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");
    }
}

for(int j=0;j)您没有将其写回文件。您的意思是写入的StringWriter为空吗?是的StringWriter为空您在if语句中缺少一个大括号。for循环条件应为
j
,而不是
,我还怀疑您可能在代码中吞下了NPE,这就是为什么您没有看到它?这实际上是不是都包装在一个try/catch中,捕获异常并忽略它?结果证明空检查是必要的,因为循环条件不正确。您是非常正确的。现在代码工作得很好,非常感谢。如何如果使用David建议的j