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"))