JAXP----DOM方式操作XML文件
阿新 • • 發佈:2019-01-22
import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; 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.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import com.sun.org.apache.xalan.internal.xsltc.cmdline.Transform; public class demo1 { /** * 用jaxp操作xml文件 增刪改查 * * @param args * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { // 獲取工廠 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 產生解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析XML文件, Document document = builder.parse(new File("src/book.xml")); read(document); } // 讀取XML文件 ,得到售價節點 public static void read(Document document) { NodeList list = document.getElementsByTagName("售價"); /* NodeList */ Node price = list.item(0); String value = price.getTextContent(); // 獲取節點的值 System.out.println(value); } // 更新XML文件中的值 @Test public void update() throws ParserConfigurationException, SAXException, IOException, TransformerException { // 獲取工廠 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 產生解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析XML文件, Document document = builder.parse(new File("src/book.xml")); // 更新記憶體中的值 NodeList list = document.getElementsByTagName("售價"); Node price = list.item(0); price.setTextContent("110"); // 將記憶體中的值寫入XML文件中 TransformerFactory transform = TransformerFactory.newInstance(); // 得到轉換器 Transformer transformer = transform.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult( "src/book.xml")); } @Test public void add() throws ParserConfigurationException, SAXException, IOException, TransformerException { // 獲取工廠 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 產生解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析XML文件, Document document = builder.parse(new File("src/book.xml")); Node price = document.createElement("作者"); price.setTextContent("張孝祥"); // 得到父節點 Node pranet = document.getElementsByTagName("書").item(0); pranet.appendChild(price); TransformerFactory tf= TransformerFactory.newInstance(); Transformer ts= tf.newTransformer(); ts.transform(new DOMSource(document), new StreamResult(new File("src/book.xml"))); } //插向指定節點 @Test public void add2() throws ParserConfigurationException, SAXException, IOException, TransformerException { // 獲取工廠 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 產生解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析XML文件, Document document = builder.parse(new File("src/book.xml")); Node price = document.createElement("路"); price.setTextContent("路承陳"); // 得到父節點 Node pranet = document.getElementsByTagName("書").item(0); pranet.insertBefore(price, document.getElementsByTagName("售價").item(0)); TransformerFactory tf = TransformerFactory.newInstance(); Transformer ts = tf.newTransformer(); ts.transform(new DOMSource(document), new StreamResult(new File("src/book.xml"))); } @Test public void delete() throws ParserConfigurationException, SAXException, IOException, TransformerException{ // 獲取工廠 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 產生解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析XML文件, Document document = builder.parse(new File("src/book.xml")); Node price =document.getElementsByTagName("售價").item(0); price.getParentNode().removeChild(price); TransformerFactory tf = TransformerFactory.newInstance(); Transformer ts = tf.newTransformer(); ts.transform(new DOMSource(document), new StreamResult(new File("src/book.xml"))); } //操作XML文件屬性*** 操作XML文件的元素時,一般都把元素當作node物件,但是發現node不好使時,轉換為Element @Test public void updateAttribute() throws ParserConfigurationException, SAXException, IOException, TransformerException{ // 獲取工廠 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 產生解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析XML文件, Document document = builder.parse(new File("src/book.xml")); //轉換為Element Element book =(Element)document.getElementsByTagName("書").item(0); book.setAttribute("name", "yyyy"); TransformerFactory tf = TransformerFactory.newInstance(); Transformer ts = tf.newTransformer(); ts.transform(new DOMSource(document), new StreamResult(new File("src/book.xml"))); } }