解析xml如下
<?xml version="1.0" encoding="UTF-8"?> <BookStore> <myBook NO="1"> <Book> <BookName ID="A001">JAVA</BookName> <love>I love you</love> <Author>Jack</Author> <Price>110</Price> <City>nanjing</City> </Book> <Book> <BookName ID="A002">android</BookName> <Author>Lucy</Author> <Price>20</Price> </Book> </myBook> </BookStore>
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.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; //优点:增删改查容易 //缺点:内存消耗较大,直接把XML封装成对象如果XML有1G,直接加入到内存中,可能会造成内存泄漏 //1:创建文档构建的工厂 //2:获得dom解析器 //3:解析xml文档,得到代表文档的document //DOM getElementsByTagName()获取元素,在进行相关操作 //Dom4j document.getRootElement()...element().elements()..; /* * <?xml version="1.0" encoding="utf-8"?> <BookStore> <Book> <BookName>JAVA</BookName> <Author>Jack</Author> <Price>110<Price> </Book> <Book> <BookName>android</BookName> <Author>simant</Author> <Price>200<Price> </Book> </BookStore> */ /* * DOM方法解析xml */ public class DOM { @Test public void test1()throws Exception { //1:创建工厂 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //2:获得dom解析器 DocumentBuilder build=factory.newDocumentBuilder(); //3:解析xml文档,得到代表文档的document Document document=build.parse("src/book.xml"); } @Test public void read()throws Exception { //读取<BookName>android</BookName>中的值android DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder build=factory.newDocumentBuilder(); Document document=build.parse("src/book.xml"); NodeList list = document.getElementsByTagName("BookName");//表示获取BooKName标签的所有节点list Node node=list.item(1);//表示获取第二个BooKName的节点 String content=node.getTextContent(); System.out.println(content); } @Test public void read1()throws Exception { // <BookName ID="A001">JAVA</BookName>获得指定标签的属性 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder build=factory.newDocumentBuilder(); Document document=build.parse("src/book.xml"); Node node=document.getElementsByTagName("BookName").item(0); NamedNodeMap s= node.getAttributes(); System.out.println(s.getNamedItem("ID")); } @Test public void add()throws Exception { //创建节点<City>nanjing</City> DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder build=factory.newDocumentBuilder(); Document document=build.parse("src/book.xml"); //创建节点 Element element=document.createElement("City"); element.setTextContent("nanjing"); //把创建的节点放在第一本书上 Element list=(Element) document.getElementsByTagName("BookName").item(0); list.appendChild(element); //把更新后的内存写入xml文档 TransformerFactory factory2=TransformerFactory.newInstance(); Transformer tran=factory2.newTransformer(); tran.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml"))); } @Test public void delete()throws Exception { //删除节点 第二本书的作者<Author>Lucy</Author> DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder build=factory.newDocumentBuilder(); Document document=build.parse("src/book.xml"); //得到要删除的element Node Childnode=document.getElementsByTagName("Author").item(1); /* //得到要删除节点的父节点 Node Parentnode=document.getElementsByTagName("BooK").item(1); Parentnode.removeChild(Childnode); */ Childnode.getParentNode().removeChild(Childnode);//等价于上面删除 //Childnode.getParentNode().getParentNode().getParentNode().removeChild(Childnode.getParentNode().getParentNode());//删掉所有 //把更新后的内存写入xml文档 TransformerFactory factory2=TransformerFactory.newInstance(); Transformer tran=factory2.newTransformer(); tran.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml"))); } @Test public void update()throws Exception { // <Price>200</Price> 对第二本书的价格进行更改为20 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder build=factory.newDocumentBuilder(); Document document=build.parse("src/book.xml"); Node node=document.getElementsByTagName("Price").item(1); node.setTextContent("20"); //把更新后的内存写入xml文档 TransformerFactory factory2=TransformerFactory.newInstance(); Transformer tran=factory2.newTransformer(); tran.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml"))); } }