在java中,javax.xml.transform包中的transformer類用於xml文件的document對象轉換爲xml格式進行輸出
在學習增刪改查之前,我們先要了解xml的回寫技術
1.對xml文檔進行加載
2.回寫xml,使用transfromer
首先我們要創建xml文檔,具體如下:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name> 高效java </name>
<pirce>50 </pirce>
</book>
<book>
<name> java編程思想 </name>
<pirce> 80 </pirce>
</book>
</books>
下面是 java代碼
/**
*
*/
package com.effective_java;
import java.io.File;
import java.util.jar.Attributes.Name;
import javax.lang.model.element.Element;
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.w3c.dom.NodeList;
/**
* 這段代碼的作用是對於xml的增刪該改查,使用的dom解析的方式
*
*/
public class Model6 {
public static void main(String[] args) throws Exception {
//
File file = new File("value1\\model.xml");
// TODO 自動生成的方法存根
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse("value\\NewFile.xml");
// 前三句是將文件加載到內存
org.w3c.dom.Element newbook = document.createElement("book");// 創建了一個元素
org.w3c.dom.Element root = document.getDocumentElement();
root.appendChild(newbook);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(file);
transformer.transform(domSource, streamResult);
// 最後實現回寫
// 好的現在我們更改需求,對book增加子標籤<name>可以這麼坐
org.w3c.dom.Element bookname = document.createElement("name");
bookname.setTextContent("java編程詞典");
newbook.appendChild(bookname);
transformer.transform(domSource, streamResult);// 回寫
// 那麼現在 我們再次學習設置新加入元素的屬性
newbook.setAttribute("id", "text");
transformer.transform(domSource, streamResult);// 回寫
// 接着我們對元素進行修改分下面幾步
// .查詢到指定元素(1:修改屬性的值2:修改文本內容)
/**
* 1加載資源 2得到相應節點 3回寫 上面的加載資源和回寫我們已經實現過了,現在我們都只是實現其關鍵部分
*/
// 在這個例子中,我們以對書籍的pirce進行修改,將java編程思想價格降低到以前的80%;
NodeList nodeList = document.getElementsByTagName("name");// 獲取到元素節點
for (int i = 0; i < nodeList.getLength(); i++) {
org.w3c.dom.Element element = (org.w3c.dom.Element) nodeList.item(i);
if (element.getTextContent().equals("java編程思想")) {
// 在xml中,我們可以看到pirce元素是element的兄弟的兄弟
org.w3c.dom.Element pirce = (org.w3c.dom.Element) element.getNextSibling().getNextSibling();
double d = Double.parseDouble(pirce.getTextContent());
String string = Double.toString(d * 0.8);
pirce.setTextContent(string);
System.out.println(d);
transformer.transform(domSource, streamResult);// 回寫
}
}
//在實現了元素的修改過後,我們再來是想元素的刪除工作,在刪除中,
//只能通過父親節點刪除子節點,所喲我們要直接找到被刪除節點的父節點
//然後才能進新刪除
/**
* 同樣,我們也要加載到內存,然後進行查找,最後進行刪除
* 在這裏,我們以實現刪除帶有java字樣的節點元素
*/
NodeList no=document.getElementsByTagName("name");//進行全局定位,找到name節點
for(int i=0;i<no.getLength();i++){
org.w3c.dom.Element element1=(org.w3c.dom.Element)no.item(i);
if(element1.getTextContent().contains("java")){
org.w3c.dom.Element element3=(org.w3c.dom.Element)element1.getParentNode();
element3.getParentNode().removeChild(element3);
i--;//對i進行修正
}
transformer.transform(domSource, streamResult);// 回寫
}
}
}
//本文章爲原創,如果有任何問題,請與本人聯繫