为了账号安全,请及时绑定邮箱和手机立即绑定

xml文件已经存在如何追加内容

如何向已经存在的xml文件中追加内容

正在回答

1 回答

可以使用DOM、JDOM和SAX方式向一个已经存在的XML文件中追加内容,SAX方式比较复杂。例如:原来的XML文件是:

<?xml version = "1.0" encoding = "utf-8"?>
<bookstore>
	<book id="1">
		<name>冰与火之歌</name>
		<author>乔治马丁</author>
		<year>2014</year>
		<price>89</price>
	</book>
	<book id="2">
		<name>安徒生童话</name>
		<year>2004</year>
		<price>77</price>
		<language>English</language>
	</book>
</bookstore>

    我们要向第一个book节点的最后添加一个language节点:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore> 
  <book id="1"> 
    <name>冰与火之歌</name>  
    <author>乔治马丁</author>  
    <year>2014</year>  
    <price>89</price>  
    <language>简体中文</language>
  </book>  
  <book id="2"> 
    <name>安徒生童话</name>  
    <year>2004</year>  
    <price>77</price>  
    <language>English</language> 
  </book> 
</bookstore>

基本思路是先解析到适当的位置再进行插入:

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<Element> 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方式是最简单的,推荐使用这种方式。

5 回复 有任何疑惑可以回复我~
#1

飞了的人 提问者

非常感谢!
2015-02-17 回复 有任何疑惑可以回复我~
#2

JessicaJiang

给你点32个赞嘻嘻~!
2015-02-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

xml文件已经存在如何追加内容

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信