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

本文实例讲述了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();
    }
  }
}

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson

在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat

XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress

XML代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • java使用DOM4J对XML文件进行增删改查操作

    本文实例为大家分享了java使用DOM4J对XML文件进行增删改查操作的具体代码,供大家参考,具体内容如下 源代码: DOM4j.java package com.zc.homeWork19; import java.io.FileWriter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Elem

  • java对XML文件的解析、节点的增加、删除操作总结

    1.java代码: 主要采用dom来进行操作 复制代码 代码如下: package test; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.T

  • java操作xml的方法汇总及解析

    这篇文章主要介绍了java操作xml的方法汇总及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一丶常用方法 主要有3个方面, 1读取xml文件, 2使用xpath根据指定路径获取某一节点数据 3, xml和java bean的转换 XmlUtils.java /** * 和cn.hutool.core.util.XmlUtil许多功能重合, 本类可以当做学习的例子 * 可以直接使用cn.hutool.core.util.XmlUtil *

  • Java操作XML工具类XmlUtil详解

    本文实例为大家分享了Java操作XML工具类的具体代码,供大家参考,具体内容如下 一.代码 public class XmlUtil { /** * 将XML文件输出到指定的路径 * * @param doc * @param fileName * @throws Exception */ public static void outputXml(Document doc, String fileName) throws Exception { TransformerFactory tf = T

  • java使用jaxb操作xml示例

    首先定义两个示例类ClassA,ClassB,用于后续的示例演示 复制代码 代码如下: package cn.lzrabbit; public class ClassA {     private int classAId;     private String classAName; private ClassB classB; public int getClassAId() {         return classAId;     } public void setClassAId(i

  • java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解

    1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像SAX那

  • java中四种操作xml方式的比较

    1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像SAX那

  • java实现XML增加元素操作简单示例

    本文实例讲述了java实现XML增加元素操作.分享给大家供大家参考,具体如下: package Day01; import java.io.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.*; public

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

    本文实例讲述了Java对XML文件增删改查操作.分享给大家供大家参考,具体如下: xml文件: <?xml version="1.0" encoding="UTF-8"?> <books> <book> <name>哈里波特</name> <price>10</price> <memo>这是一本很好看的书.</memo> </book> <b

  • PHP实现对xml的增删改查操作案例分析

    本文实例讲述了PHP实现对xml的增删改查操作.分享给大家供大家参考,具体如下: 案例: index.php <?php header("content-type:text/html;charset=utf-8"); $xmldom = new DOMDocument(); $xmldom->load("demo2.xml"); //查询学生信息 $stus = $xmldom->getElementsByTagName("学生"

  • Android利用Dom对XML进行增删改查操作详解

    1. 概述 平常我们一般是使用JSON与服务器做数据通信,JSON的话,直接用GSON或者其他库去解析很简单.但是,其他有些服务器会返回XML格式的文件,这时候就需要去读取XML文件了. XML的解析有三种方式,在Android中提供了三种解析XML的方式:DOM(Document Objrect Model) , SAX(Simple API XML) ,以及Android推荐的Pull解析方式,他们也各有弊端,而这里来看看使用DOM的方式. 2. Dom解析 DOM解析器在解析XML文档时,

  • Java连接数据库,及增删改查的示例

    自定义连接数据库的util类 package com.shuzf.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtil { // 定义驱动器类的路径 private static final String DRI

  • Python连接mysql数据库及简单增删改查操作示例代码

    1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连接数据库测试 import pymysql #打开数据库 db = pymysql.connect(host="localhost",user="root",password="root",db="test") #使用cursor

  • Android连接MySQL数据库并进行增删改查操作示例讲解

    1.Android 连接MySQL数据库 public class DBOpenHelper { private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动 private static String url = "jdbc:mysql://IP:3306/数据库";//MYSQL数据库连接Url private static String user = "root";//用

  • Java使用dom4j实现对xml简单的增删改查操作示例

    本文实例讲述了Java使用dom4j实现对xml简单的增删改查操作.分享给大家供大家参考,具体如下: xml留了个结课作业: 后台用xml文件作为存储做个迷你系统实现增删改查的功能, 在此记录一下 先得引入dom4j的jar包放在项目的WEB-INF-->lib目录下 先新建一个读取器,  读取你想操作的xml文件(我这里写的绝对路径) //读取XML文件,获得document对象 SAXReader reader = new SAXReader(); Document document = n

  • Java基于jdbc实现的增删改查操作示例

    本文实例讲述了Java基于jdbc实现的增删改查操作.分享给大家供大家参考,具体如下: 增删改操作: package java_web; import java.sql.DriverManager; import java.sql.SQLException; import com.mysql.jdbc.Connection; import com.mysql.jdbc.Statement; /** * jdbc CURD * @author Administrator * */ public c

  • JS实现数组的增删改查操作示例

    本文实例讲述了JS实现数组的增删改查操作.分享给大家供大家参考,具体如下: 1.给原数组中 新增 用到 push 改变原数组的长度并返回新的长度,新元素添加在原数组的末尾 <doctype> <html> <head>元素新增数组</head> <body> <div id="dem">点击会给原素组末尾新增元素个数</div> <button onclick="funct()"

  • mysql触发器之触发器的增删改查操作示例

    本文实例讲述了mysql触发器之触发器的增删改查操作.分享给大家供大家参考,具体如下: 我们在创建触发器后,可以在包含触发器定义文件的数据文件夹中显示其定义.触发器作为纯文本文件存储在以下数据库文件夹中: /data_folder/database_name/table_name.trg 我们还可通过查询information_schema数据库中的triggers表来显示触发器,如下所示: SELECT * FROM information_schema.triggers WHERE trig

随机推荐