最近用到解析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>
可以看到红色的部分就是我们添加的内容。