解析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")));
}
}