解析Xml文档:
Xml文档解析有dom解析,Sax解析,dom解析优点是可以对Xml文档进行增删改查,缺点就是内存占用比较大,而sax解析只能读Xml文档,但是占用内存小,读取快。
dom解析分为三步:
1.创建一个DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2.得到dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
3.解析Xml文档,得到代表文档的document
Document document = builder.parse(“xml文件位置”);
将生成的document的文档存入内存:
TransformerFactory ttfactory = TransformerFactory.newInstance();
Transformer tf = ttfactory.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Exam.xml")));
对xml文档的增删改查:
package Xml; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Demo1 { @Test public void read1() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); NodeList list = document.getElementsByTagName("书名"); Node node = list.item(1); String content = node.getTextContent(); System.out.println(content); } @Test public void read2() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); Node root = document.getElementsByTagName("书架").item(0); list(root); } private void list(Node root) { if(root instanceof Element){ System.out.println(root.getNodeName()); } // System.out.println(root.getNodeName()); NodeList list = root.getChildNodes(); for(int i=0;i<list.getLength();i++){ Node child = list.item(i); list(child);//递归了 } } @Test public void read3() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); Element root = (Element) document.getElementsByTagName("书名").item(0); String bookname = root.getAttribute("name"); System.out.println(bookname); } //增 @Test public void add() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); Element price = document.createElement("售价"); price.setTextContent("59.00元"); //把结点挂在"书"结点下 Element book = (Element) document.getElementsByTagName("书").item(0); book.appendChild(price); TransformerFactory ttfactory = TransformerFactory.newInstance(); Transformer tf = ttfactory.newTransformer(); tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Xml/MyXml.xml"))); } @Test public void add1() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); //得到创建结点 Element price = document.createElement("售价"); price.setTextContent("59.00元"); Element refNode = (Element) document.getElementsByTagName("售价").item(0); //把结点挂在"书"结点下 Element book = (Element) document.getElementsByTagName("书").item(0); book.insertBefore(price,refNode); //把更改后的文件写入内存 TransformerFactory ttfactory = TransformerFactory.newInstance(); Transformer tf = ttfactory.newTransformer(); tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Xml/MyXml.xml"))); } @Test public void addAttr() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); Element bookname = (Element) document.getElementsByTagName("书名").item(0); bookname.setAttribute("name","xxx"); //把更改后的文件写入内存 TransformerFactory ttfactory = TransformerFactory.newInstance(); Transformer tf = ttfactory.newTransformer(); tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Xml/MyXml.xml"))); } //删 @Test public void delte() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); Element book = (Element) document.getElementsByTagName("书").item(0); Element price = (Element) document.getElementsByTagName("售价").item(0); book.removeChild(price); //把更改后的文件写入内存 TransformerFactory ttfactory = TransformerFactory.newInstance(); Transformer tf = ttfactory.newTransformer(); tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Xml/MyXml.xml"))); } @Test public void delte1() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); Element e = (Element) document.getElementsByTagName("售价").item(0); //删除所在结点所在的书 e.getParentNode().getParentNode().removeChild(e.getParentNode()); //把更改后的文件写入内存 TransformerFactory ttfactory = TransformerFactory.newInstance(); Transformer tf = ttfactory.newTransformer(); tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Xml/MyXml.xml"))); } @Test public void update() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/Xml/MyXml.xml"); Element e = (Element) document.getElementsByTagName("售价").item(0); e.setTextContent("109.00元"); //把更改后的文件写入内存 TransformerFactory ttfactory = TransformerFactory.newInstance(); Transformer tf = ttfactory.newTransformer(); tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/Xml/MyXml.xml"))); } }
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <书架> <书> <书名 name="xxx">JavaWeb开发教程</书名> <作者>张孝祥</作者> <售价>59</售价> <售价>34</售价> </书> <书> <书名>JavaScript开发教程</书名> <作者>黎活明</作者> <售价>25</售价> </书> </书架>原文链接:https://www.f2er.com/xml/298037.html