JDK DocumentBuilderFactory解析xml,并给xml中添加元素

最近用到解析xml,再次回顾了一下,做个小Demo,做个记录。

package www.cfyg.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
/**
 * @author lenovo
 * @Data   2019-01-16 10:21:32
 * @Description:DocumentBuilderFactory解析xml
 * 1.DocumentBuilderFactory创建DOM模式的解析器对象, DocumentBuilderFactory是抽象工厂类,不能  直接实例化,但是有newInstance方法
 */
public class Test {
/***
 * 1.DocumentBuilderFactory解析xml
 * 2.读出来再追加,追加的时候是在内存中,我们需要存入到文件中。
 * @param args
 * @throws ParserConfigurationException
 * @throws SAXException
 * @throws IOException
 * @throws TransformerException 
 */
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {
		// 得到创建 DOM 解析器的工厂
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		//得到 DOM 解析器对象
		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
		
		//把要解析的 XML 文档转化为输入流,以便 DOM 解析器解析它

		InputStream is= new  FileInputStream(new File("c:/aa/test.xml")); 
		//DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象
		Document doc=documentBuilder.parse(is);
		//得到 XML 文档的根节点
		Element rootElement = doc.getDocumentElement();
		
		//创建node对象,并添加子节点
		Node node=doc.createElement("student");
		Node child = node.appendChild(doc.createElement("name"));
		child.setTextContent("kunkun");
		Node child2 = node.appendChild(doc.createElement("age"));
		child2.setTextContent("29");
		
		//追加子节点
		rootElement.appendChild(node);
		//输出跟节点的对象,相当是内存地址:所以就是:[banji: null]根;System.out.println(rootElement+"根");
		
		//得到跟节点的名字
		String nodeName = rootElement.getNodeName();
		System.out.println(nodeName +"根节点的名字!");
		//往文件中添加
		 TransformerFactory transformerFactory = TransformerFactory.newInstance();
		 Transformer  transformer = transformerFactory.newTransformer();
		 DOMSource source = new DOMSource(doc);
		 StreamResult streamResult = new StreamResult(new File("c:/aa/test.xml"));
		 transformer.transform(source, streamResult);
	
	}

}

test.xml展示如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<banji>
	<student>
		<name>zhangsan</name>
		<age>18</age>
	</student>
	
	<student>
		<name>lisi</name>
		<age>19</age>
	</student>
	
	 <student>
		<name>zhaoliu</name>
		<age>20</age>
	</student>
	
</banji>

 小编将test.xml文件复制到自己本机C盘下的aa文件夹下,运行main()方法后,在本机的test.xml文件进行了修改。

<?xml version="1.0" encoding="UTF-8" standalone="no"?><banji>
    <student>
        <name>zhangsan </name>
        <age>18</age>
    </student>
    <student>
        <name> lisi</name>
        <age>19 </age>
    </student>
    <student>
        <name> zhaoliu </name>
        <age>20</age>
    </student>

<student>

<name>kunkun</name>

<age>29</age>

</student>

</banji>

可以看到红色的部分就是我们添加的内容。

猜你喜欢

转载自blog.csdn.net/qq_40615403/article/details/86509544