首页 > 开发 > Java > 正文

Java对XML文件增删改查操作示例

2019-10-21 18:42:30
字体:
来源:转载
供稿:网友

本文实例讲述了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教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表