對于DOM可以說已經(jīng)不算陌生,DOM (Document Object Model,文檔對象模型)定義訪問和操作文檔的一套標(biāo)準(zhǔn)方法。XML DOM和HTML DOM原理是一樣的,所以我將不過多的介紹DOM的內(nèi)容。其實(shí)DOM的宗旨就是所有的內(nèi)容都是節(jié)點(diǎn),這是我個人的理解。
什么是JAXP呢?JAXP是Java API for XML Processing的英文字頭縮寫,中文含義是:用于XML文檔處理的使用Java語言編寫的編程接口。JAXP支持DOM、SAX、XSLT等標(biāo)準(zhǔn)。
以下將介紹JAXP DOM的常見操作:
一、對DOM操作必須的
⒈創(chuàng)建解釋器工廠DocumentBuilderFactory,使用newInstance() 創(chuàng)建一個新的實(shí)例。
⒉根據(jù)解釋器工廠創(chuàng)建解釋器DocumentBuilder,使用工廠實(shí)例的newDocumentBuilder() 方法創(chuàng)建解釋器。
⒊得到Document對象,通過解釋器的parse(File f) 方法,得到XML文件的Document。
Java語言:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new File("src/stu.xml"));
二、讀取XML文件下的元素
【壹】讀取XML文件下某個標(biāo)簽的內(nèi)容
⒈取得Docment對象。
⒉得到標(biāo)簽對應(yīng)的節(jié)點(diǎn)對象(元素對象)document.getElementByTagName(“節(jié)點(diǎn)名稱”).item(“第幾個節(jié)點(diǎn)”)。
⒊讀取節(jié)點(diǎn)對象的內(nèi)容element.getTextContent();
Java語言:
Element e=document.getDocumentElement();
Element name=(Element) e.getElementsByTagName("名字").item(1);
String text = name.getTextContent();
【貳】讀取XML文件下某個標(biāo)簽的屬性
⒈取得Docment對象。
⒉得到標(biāo)簽對應(yīng)的節(jié)點(diǎn)對象(元素對象)document.getElementByTagName(“節(jié)點(diǎn)名稱”).item(“第幾個節(jié)點(diǎn)”)。
⒊讀取節(jié)點(diǎn)對象的內(nèi)容element.getAttribute();
Java語言:
Element e=document.getDocumentElement();
Element name=(Element) e.getElementsByTagName("名字").item(1);
String Attribute = name.getAttribute("屬性名稱");
三、使用JAXP DOM對XML進(jìn)行添加操作
【壹】添加標(biāo)簽
⒈取得Docment對象。
⒉創(chuàng)建節(jié)點(diǎn)元素document.createElement(“標(biāo)簽名”)
⒊添加標(biāo)簽document.appendChild(“創(chuàng)建的標(biāo)簽”)
⒋更新被更改的節(jié)點(diǎn)輸入到外部文件
*(1)得到轉(zhuǎn)換器工廠TransformerFactory,使用TransformerFactory.newInstance()。
*(2)得到轉(zhuǎn)換器Transformer,使用轉(zhuǎn)換器工廠的newTransformer()方法。
*(3)轉(zhuǎn)換器轉(zhuǎn)換transform(new DOMSource(document),new StreamResult(new File(“src/xxx.xml”)))。
Java語言:
Element stu=document.createElement("學(xué)生");
Element name=document.createElement("名字");
name.setTextContent("賈寶玉");
stu.appendChild(name);
//把stu 掛到 根元素下
document.getDocumentElement().appendChild(stu);
//更新文檔
//1.得打TransformerFactory
TransformerFactory tff=TransformerFactory.newInstance();
//2.得到一個轉(zhuǎn)化器
Transformer tf=tff.newTransformer();
//3.轉(zhuǎn)化
tf.transform(new DOMSource(document), new StreamResult(new File("src/myClass.xml")));
【貳】標(biāo)簽添加屬性
⒈取得Docment對象。
⒉得到標(biāo)簽對應(yīng)的節(jié)點(diǎn)對象(元素對象)document.getElementByTagName(“節(jié)點(diǎn)名稱”).item(“第幾個節(jié)點(diǎn)”)。
⒊設(shè)置節(jié)點(diǎn)對象的屬性setAttribute(“sex”, “男”)。
⒋更新被更改的節(jié)點(diǎn)輸入到外部文件
Java語言:
//得到第三個學(xué)生的節(jié)點(diǎn)對象
Element e=(Element) doc.getElementsByTagName("學(xué)生").item(2);
e.setAttribute("sex", "男");//添加屬性
//這是添加屬性的第二種方法.
Attr att=doc.createAttribute("sex2");
att.setTextContent("女");
e.setAttributeNode(att);
//更新
TransformerFactory tff=TransformerFactory.newInstance();
Transformer tf=tff.newTransformer();
tf.transform(new DOMSource(doc), new StreamResult(new File("src/myClass.xml")));
三、使用JAXP DOM對XML進(jìn)行刪除操作
【壹】刪除標(biāo)簽
⒈取得Docment對象。
⒉得到要刪除標(biāo)簽對應(yīng)的節(jié)點(diǎn)對象(元素對象)document.getElementByTagName(“節(jié)點(diǎn)名稱”).item(“第幾個節(jié)點(diǎn)”)。
⒊通過父節(jié)點(diǎn)刪除標(biāo)簽e.getParentNode().removeChild(e)。
⒋更新被更改的節(jié)點(diǎn)輸入到外部文件。
Java語言:
//得到第三個學(xué)生的節(jié)點(diǎn)對象
Element e=(Element) doc.getElementsByTagName("學(xué)生").item(2);
doc.getDocumentElement().removeChild(e);
//我們在刪除某個節(jié)點(diǎn)的時候,可以通過 得打其父節(jié)點(diǎn),然后將其刪除.
e.getParentNode().removeChild(e);
TransformerFactory tff=TransformerFactory.newInstance();
Transformer tf=tff.newTransformer();
tf.transform(new DOMSource(doc), new StreamResult(new File("src/myClass.xml")));
【貳】刪除標(biāo)簽屬性
⒈取得Docment對象。
⒉得到要刪除標(biāo)簽對應(yīng)的節(jié)點(diǎn)對象(元素對象)document.getElementByTagName(“節(jié)點(diǎn)名稱”).item(“第幾個節(jié)點(diǎn)”)。
⒊刪除標(biāo)簽屬性e.removeAttribute(“屬性名”);
⒋更新被更改的節(jié)點(diǎn)輸入到外部文件
四、更新
【壹】更新標(biāo)簽setTextContent(“內(nèi)容”)。
【貳】更新標(biāo)簽屬性setAttribute(“屬性名”, 屬性值 )