java xml 追加_xml文件已经存在如何追加内容
可以使用DOM、JDOM和SAX方式向一个已经存在的XML文件中追加内容,SAX方式比较复杂。例如:原来的XML文件是:冰与火之歌乔治马丁201489安徒生童话200477English我们要向第一个book节点的最后添加一个language节点:冰与火之歌乔治马丁201489简体中文安徒生童话200477English基本思路是先解析到适当的位置再进行插入:DOM方式:privatestati.
可以使用DOM、JDOM和SAX方式向一个已经存在的XML文件中追加内容,SAX方式比较复杂。例如:原来的XML文件是:<?xml version = "1.0" encoding = "utf-8"?>
冰与火之歌
乔治马丁
2014
89
安徒生童话
2004
77
English
我们要向第一个book节点的最后添加一个language节点:<?xml version="1.0" encoding="UTF-8"?>
冰与火之歌
乔治马丁
2014
89
简体中文
安徒生童话
2004
77
English
基本思路是先解析到适当的位置再进行插入:
DOM方式:private static void appendXMLByDOM() throws ParserConfigurationException,
TransformerException, SAXException, IOException {
// 1.创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 2.根据DocumentBuilderFactory对象创建一个DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
// 3.使用DocumentBuilder对象的parse()方法返回一个Document对象(DOM树)
Document document = db.parse("books1.xml");
document.setXmlStandalone(true);// 设置XML文件的声明standalone的值为yes并不予显示
// 4.追加节点
Node book = document.getElementsByTagName("book").item(0);// 得到第一个book节点
Element language = document.createElement("language");
language.setTextContent("简体中文");
book.appendChild(language);
// 5.创建一个TransformerFactory对象
TransformerFactory tff = TransformerFactory.newInstance();
// 6.通过TransformerFactory对象创建一个Transformer对象
Transformer tf = tff.newTransformer();
// 7.利用Transformer对象的transform方法指定输出流
tf.setOutputProperty(OutputKeys.INDENT, "yes");// 设置缩进、换行
tf.transform(new DOMSource(document), new StreamResult(new File(
"books_append_dom.xml")));
}
JDOM方式:public static void appendXMLByJDOM() {
// 1.创建一个SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
InputStream in;
try {
// 2.创建一个输入流,将xml文件加载到输入流
in = new FileInputStream("books1.xml");
// 3.通过SAXBuilder的build方法将输入流加载到SAXBuilder中
Document document = saxBuilder.build(in);
// 4.通过Document对象获取xml文件的根节点
Element rootElement = document.getRootElement();
// 5.根据根节点获取子节点的List集合
List bookList = rootElement.getChildren();
// 6.追加节点
Element language = new Element("language");
language.setText("简体中文");
bookList.get(0).addContent(language);
// 7.设置输出流和输出格式
Format format = Format.getCompactFormat();
format.setEncoding("gb2312");//设置编码方式为gb2312
format.setIndent("");//设置缩进(此处为一个tab键)
XMLOutputter outputter = new XMLOutputter(format);
outputter.output(document, new FileOutputStream("books_append_jdom.xml"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
DOM4J方式:public static void appendXMLByDOM4J() throws IOException {
// 1.创建一个SAXReader对象reader
SAXReader reader = new SAXReader();
try {
// 2.通过reader对象的read方法加载xml文件,获取Document对象
Document document = reader.read(new File("books1.xml"));
Element bookStore = document.getRootElement();// 通过document对象获取根节点bookstore
Element book = bookStore.element("book");
Element language = book.addElement("language");
language.setText("简体中文");
// 3.设置输出格式和输出流
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream(
"books_append_dom4j.xml"), format);
writer.write(document);// 将文档写入到输出流
writer.close();
} catch (DocumentException e) {
e.printStackTrace();
}
}
其中DOM4J方式是最简单的,推荐使用这种方式。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)