使用Java向现有XML文件添加元素
我有一个现有的空白XML文件,如下所示:使用Java向现有XML文件添加元素,java,xml,xml-parsing,Java,Xml,Xml Parsing,我有一个现有的空白XML文件,如下所示: <root> <!--Some Comment goes here> </root> 在辅助GUI中添加元素的代码: JButton btnSave = new JButton("Save"); btnSave.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg
<root>
<!--Some Comment goes here>
</root>
在辅助GUI中添加元素的代码:
JButton btnSave = new JButton("Save");
btnSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
dbfac.setIgnoringComments(true);
DocumentBuilder docBuilder;
try {
docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.parse("sample.xml");
NodeList rt = doc.getElementsByTagName("root");
Element child = doc.createElement("content");
child.setAttribute("title", textField.getText().toString());
rt.item(0).appendChild(child);
Text text = doc.createTextNode(textArea.getText().toString());
child.appendChild(text);
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("sample.xml", true)));
out.println(xmlString);
out.close();
System.out.println(xmlString);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
我不知道这是一个打字错误还是一个错误,但XML注释是这样的:
。它必须以-->
结尾。哦,对不起。这是一个输入错误。但是,它并不能解决问题。您说您得到了一个NullPointerException,所以在代码中显示stacktrace。并指出异常出现在哪一行。
JButton btnSave = new JButton("Save");
btnSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
dbfac.setIgnoringComments(true);
DocumentBuilder docBuilder;
try {
docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.parse("sample.xml");
NodeList rt = doc.getElementsByTagName("root");
Element child = doc.createElement("content");
child.setAttribute("title", textField.getText().toString());
rt.item(0).appendChild(child);
Text text = doc.createTextNode(textArea.getText().toString());
child.appendChild(text);
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("sample.xml", true)));
out.println(xmlString);
out.close();
System.out.println(xmlString);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});