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

来源:2-2 创建 XML 文件

飞了的人

2015-02-15 14:01

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

写回答 关注

1回答

  • _潇潇暮雨
    2015-02-16 12:02:27
    已采纳

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

    Jessic...

    给你点32个赞嘻嘻~!

    2015-02-27 12:37:30

    共 2 条回复 >

Java眼中的XML 文件写入

举例说明JAVA程序如何生成XML文档,多种生成方式任你选择

55804 学习 · 132 问题

查看课程

相似问题