更改节点后如何更新XML文件?

我正在使用Node.setTextContent()来编辑节点,但它没有改变文件中的任何内容。 如果我打印文本内容后,它将显示为已更改但在程序关闭后不会保留。

for (int y=0; y<calendarDataNode.getChildNodes().getLength(); y++) { //if (year node name == "y" + current year) if (calendarDataNode.getChildNodes().item(y).getNodeName().equals("y" + Main.year)) { //for (int m=0; m<number of child nodes of year node; m++) for (int m=0; m<calendarDataNode.getChildNodes().item(y).getChildNodes().getLength(); m++) { //if (month node name == "m" + current month) if (calendarDataNode.getChildNodes().item(y).getChildNodes().item(m).getNodeName().equals("m" + (Main.month_index-1))) { //for (int d=0; d<number of child nodes of month node; d++) for (int d=0; d<calendarDataNode.getChildNodes().item(y).getChildNodes().item(m).getChildNodes().getLength(); d++) { //label node node = calendarDataNode.getChildNodes().item(y).getChildNodes().item(m).getChildNodes().item(d).getChildNodes().item(0); node.setTextContent(tf_label.getText()); } } } } } try (FileOutputStream outStream = new FileOutputStream("Calendar.xml")) { Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.INDENT, "yes"); tf.setOutputProperty(OutputKeys.METHOD, "xml"); tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); DOMSource domSource = new DOMSource(xmlDoc); StreamResult sr = new StreamResult(outStream ); tf.transform(domSource, sr); } catch (TransformerException | IOException e) {e.printStackTrace(System.out);} 

更换…

 OutputFormat outFormat = new OutputFormat(xmlDoc); try (FileOutputStream outStream = new FileOutputStream("src/virtualagenda/Calendar.xml")) { XMLSerializer serializer = new XMLSerializer(outStream, outFormat); serializer.serialize(xmlDoc); outStream.close(); }catch(IOException e) {e.printStackTrace(System.out);} 

更喜欢……

 Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.INDENT, "yes"); tf.setOutputProperty(OutputKeys.METHOD, "xml"); tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); try (FileOutputStream outStream = new FileOutputStream("Calendar.xml")) { DOMSource domSource = new DOMSource(document); StreamResult sr = new StreamResult(outStream ); tf.transform(domSource, sr); } catch (TransformerConfigurationException, TransformerException exp) { exp.printStackTrace(); } 

更新了runnable示例

所以用……

   yellow orange yellow  

然后使用……

 try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("Calendar.xml")); NodeList nodeList = document.getDocumentElement().getChildNodes(); for (int index = 0; index < nodeList.getLength(); index++) { Node node = nodeList.item(index); if (node.getNodeType() != Node.TEXT_NODE) { node.setTextContent("Some text"); } } Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.INDENT, "yes"); tf.setOutputProperty(OutputKeys.METHOD, "xml"); tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); try (FileOutputStream os = new FileOutputStream(new File("Calendar.xml"))) { DOMSource domSource = new DOMSource(document); StreamResult sr = new StreamResult(os); tf.transform(domSource, sr); } } catch (SAXException | TransformerException | IOException | ParserConfigurationException ex) { ex.printStackTrace(); } 

输出...

   Some text Some text Some text  

转换代码有效,您的代码中还有其他内容,您没有向我们展示哪些内容无效...