XML解析方式分为两种:dom和sax
.dom:(Document Object Model,即文档对象模型)
是W3C组织推荐的解析XML的一种方式
.sax :(Simple API for XML),不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它
Dom和sax解析方法的区别
1.dom解析的优点是对文档crud比较方便,缺点是占用内存比较大
2.sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud
调整jvm(java虚拟机)大小
XML解析开发包
jaxp(sun),jdom,dom4j
JAXP:
JAXP开发包是J2SE的一部分,由javax.xml,org.w3c.dom,org.xml.sax包及其子包组成
在javax.xml.parsers包中,定义了几个工厂类,程序调用这几个工厂类,就可以得到xml文档的DOM或SAX的解析器,从而实现对XML的解析
更新XML:javax.xml.transform包中Transformer类用于把XML文件的Document对象转换为某种格式后进行输出,例如把xml文件应用样式表转换成一个html文档。利用这个对象,当然也可以把Document对象又重新写入到XML文档中
Transformer类通过transform方法完成转换操作,该方法接收一个源和一个目的地。通过
.javax.xml.transform.dom.DOMSource类来关联要转换的document对象
.用javax.xml.transform.stream.StreamResult对象来表示数据的目的地
.Transformer对象通过TransformerFactory获得
举例:book.xml
<?xml version="1.0" encoding="UTF-8" ?>
<书架>
<书>
<书名 name = "xxxx ">java 就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名 >javaScript网页制作</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
1.创建工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
2.得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
3.解析XML,得到代表文档的document
Document document = builder.pase("src/book.xml")
4.使用dom方式对xml文档进行crud
----// 读xml文档中:<书名>javaScript网页开发</书名> 节点中的值
NodeList list = document .getElementsByTagName("书名");
Node node = list.item(1);
String content = node.getTextContent();
system.out.println(content);——>结果显示:javaScript网页开发
---// 得到xml标签属性的值:<书名 name="xxxx" >javaScrip就业培训课程</书名>
Element bookname = document.getElementsByTagName("书名").item(0);
String value = bookname.getAttribute("name");
system.out.println(value );——>结果显示:xxxx
-----//向xml文档中指定位置上添加节点:<售价>59.00元</售价>
//创建节点
Element price = document.createElement("售价");
price.setTextContent("59.00元");
// 得到参考节点
Element refNode = (Element)document.getElementByTagName("售价").item(0);
//得到要挂孩子的节点
Element book= (Element)document.getElementByTagName("书").item(0);
//往book节点指定位置插孩子
book.insertBefore(price,refNode );
//更新后的内存写到xml文档中
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory .newTransformer();
tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml")))
结果:
<?xml version="1.0" encoding="UTF-8" ?>
<书架>
<书>
<书名 name = "xxxx ">java 就业培训教程</书名>
<作者>张孝祥</作者>
<售价>59.00元</售价>
<售价>39.00元</售价>
</书>
<书>
<书名 >javaScript网页制作</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
//得要要删除的节点
Element e = (Element)document.getElementByTagName("售价").item(0);
////得到要删除节点的爸爸
//Element book= (Element)document.getElementByTagName("书").item(0);
////爸爸再删孩子
//book.removeChid(e);
e.getParentNode().removeChild(e);
//更新后的内存写到xml文档中
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory .newTransformer();
tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml"))
//更新售价Element e = (Element)document.getElementByTagName("售价").item(0);
e.setTextContent("109.00元");
//更新后的内存写到xml文档中
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory .newTransformer();
tf.transform(new DomSource(document),new StreamResult(new FileOutputStream("src/book.xml"))