国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java對XML文件增刪改查操作示例

2024-07-14 08:43:17
字體:
來源:轉載
供稿:網友

本文實例講述了Java對XML文件增刪改查操作。分享給大家供大家參考,具體如下:

xml文件:

<?xml version="1.0" encoding="UTF-8"?><books>  <book>    <name>哈里波特</name>    <price>10</price>    <memo>這是一本很好看的書。</memo>  </book>  <book id="B02">    <name>三國演義</name>    <price>10</price>    <memo>四大名著之一。</memo>  </book>  <book id="B03">    <name>水滸</name>    <price>6</price>    <memo>四大名著之一。</memo>  </book>  <book id="B04">    <name>紅樓</name>    <price>5</price>    <memo>四大名著之一。</memo>  </book></books>

增刪改查 Test.java

import java.io.File;import java.io.FileOutputStream;import org.w3c.dom.*;import javax.xml.parsers.*;import javax.xml.transform.*;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.*;import javax.xml.xpath.*;public class Test {  public static void main(String[] args) {    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();    Element theBook = null, theElem = null, root = null;    try {      factory.setIgnoringElementContentWhitespace(true);      DocumentBuilder db = factory.newDocumentBuilder();      Document xmldoc = (Document) db.parse(new File("Test.xml"));      root = xmldoc.getDocumentElement();      // --- 新建一本書開始 ----      theBook = xmldoc.createElement("book");      theElem = xmldoc.createElement("name");      theElem.setTextContent("新書");      theBook.appendChild(theElem);      theElem = xmldoc.createElement("price");      theElem.setTextContent("20");      theBook.appendChild(theElem);      theElem = xmldoc.createElement("memo");      theElem.setTextContent("新書的更好看。");      theBook.appendChild(theElem);      root.appendChild(theBook);      System.out.println("--- 新建一本書開始 ----");      output(xmldoc);      // --- 新建一本書完成 ----      // --- 下面對《哈里波特》做一些修改。 ----      // --- 查詢找《哈里波特》----      theBook = (Element) selectSingleNode("/books/book[name='哈里波特']",          root);      System.out.println("--- 查詢找《哈里波特》 ----");      output(theBook);      // --- 此時修改這本書的價格 -----      theBook.getElementsByTagName("price").item(0).setTextContent("15");// getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相當于xpath的".//price"。      System.out.println("--- 此時修改這本書的價格 ----");      output(theBook);      // --- 另外還想加一個屬性id,值為B01 ----      theBook.setAttribute("id", "B01");      System.out.println("--- 另外還想加一個屬性id,值為B01 ----");      output(theBook);      // --- 對《哈里波特》修改完成。 ----      // --- 要用id屬性刪除《三國演義》這本書 ----      theBook = (Element) selectSingleNode("/books/book[@id='B02']", root);      System.out.println("--- 要用id屬性刪除《三國演義》這本書 ----");      output(theBook);      theBook.getParentNode().removeChild(theBook);      System.out.println("--- 刪除后的XML ----");      output(xmldoc);      // --- 再將所有價格低于10的書刪除 ----      NodeList someBooks = selectNodes("/books/book[price<10]", root);      System.out.println("--- 再將所有價格低于10的書刪除 ---");      System.out.println("--- 符合條件的書有 " + someBooks.getLength()          + "本。 ---");      for (int i = 0; i < someBooks.getLength(); i++) {        someBooks.item(i).getParentNode().removeChild(someBooks.item(i));      }      output(xmldoc);      saveXml("Test1_Edited.xml", xmldoc);    } catch (Exception e) {      e.printStackTrace();    }  }  /**   * 將node的XML字符串輸出到控制臺   *   * @param node   */  public static void output(Node node) {    TransformerFactory transFactory = TransformerFactory.newInstance();    try {      Transformer transformer = transFactory.newTransformer();      transformer.setOutputProperty("encoding", "gb2312");      transformer.setOutputProperty("indent", "yes");      DOMSource source = new DOMSource();      source.setNode(node);      StreamResult result = new StreamResult();      result.setOutputStream(System.out);      transformer.transform(source, result);    } catch (Exception e) {      e.printStackTrace();    }  }  /**   * 查找節點,并返回第一個符合條件節點   *   * @param express   * @param source   * @return   */  public static Node selectSingleNode(String express, Object source) {    Node result = null;    XPathFactory xpathFactory = XPathFactory.newInstance();    XPath xpath = xpathFactory.newXPath();    try {      result = (Node) xpath.evaluate(express, source, XPathConstants.NODE);    } catch (XPathExpressionException e) {      e.printStackTrace();    }    return result;  }  /**   * 查找節點,返回符合條件的節點集。   * @param express   * @param source   * @return   */  public static NodeList selectNodes(String express, Object source) {    NodeList result = null;    XPathFactory xpathFactory = XPathFactory.newInstance();    XPath xpath = xpathFactory.newXPath();    try {      result = (NodeList) xpath.evaluate(express, source,          XPathConstants.NODESET);    } catch (XPathExpressionException e) {      e.printStackTrace();    }    return result;  }  /**   * 將Document輸出到文件   * @param fileName   * @param doc   */  public static void saveXml(String fileName, Document doc) {    TransformerFactory transFactory = TransformerFactory.newInstance();    try {      Transformer transformer = transFactory.newTransformer();      transformer.setOutputProperty("indent", "yes");      DOMSource source = new DOMSource();      source.setNode(doc);      StreamResult result = new StreamResult();      result.setOutputStream(new FileOutputStream(fileName));      transformer.transform(source, result);    } catch (Exception e) {      e.printStackTrace();    }  }}

 

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁河县| 嘉荫县| 延长县| 安远县| 台湾省| 临安市| 县级市| 沐川县| 马龙县| 台中县| 咸阳市| 怀集县| 黔西| 抚州市| 石台县| 中江县| 峨山| 长子县| 龙海市| 平江县| 九龙县| 兴仁县| 象州县| 遂宁市| 浮梁县| 额济纳旗| 巢湖市| 盖州市| 北京市| 若羌县| 柳州市| 凤阳县| 张家口市| 黔东| 阳泉市| 共和县| 花莲市| 昌宁县| 喜德县| 蒙阴县| 肥西县|