当前位置: 移动技术网 > IT编程>开发语言>Java > java使用DOM对XML文档进行增删改查操作实例代码

java使用DOM对XML文档进行增删改查操作实例代码

2019年07月19日  | 移动技术网IT编程  | 我要评论

本文研究的主要是java使用dom对xml文档进行增删改查操作的相关代码,具体实例如下所示。

源代码:

package com.zc.homework18;

import java.io.file;
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 javax.xml.xpath.xpath;
import javax.xml.xpath.xpathconstants;
import javax.xml.xpath.xpathexpressionexception;
import javax.xml.xpath.xpathfactory;

import org.w3c.dom.document;
import org.w3c.dom.element;
import org.w3c.dom.node;
import org.w3c.dom.nodelist;

public class xmlwriter {

  private static string xmlpath = "src\\com\\zc\\homework18\\myxml.xml";

  public static void getfamilymemebers() {

  /*
     * 创建文件工厂实例
     */
    documentbuilderfactory dbf = documentbuilderfactory.newinstance();
    // 如果创建的解析器在解析xml文档时必须删除元素内容中的空格,则为true,否则为false
    dbf.setignoringelementcontentwhitespace(true);

    try {
      /*
       * 创建文件对象
       */
      documentbuilder db = dbf.newdocumentbuilder();// 创建解析器,解析xml文档
      document doc = db.parse(xmlpath); // 使用dom解析xml文件

      /*
       * 历遍列表,进行xml文件的数据提取
       */
      // 根据节点名称来获取所有相关的节点
      nodelist sonlist = doc.getelementsbytagname("son");
      for (int i = 0; i < sonlist.getlength(); i++) // 循环处理对象
      {
        // 节点属性的处理
        element son = (element) sonlist.item(i);
        // 循环节点son内的所有子节点
        for (node node = son.getfirstchild(); node != null; node = node
            .getnextsibling()) {
          // 判断是否为元素节点
          if (node.getnodetype() == node.element_node) {
            string name = node.getnodename();
            string value = node.getfirstchild().getnodevalue();
            system.out.println(name + " : " + value);
          }
        }
      }
    } catch (exception e) {
      system.out.println(e.getmessage());
    }
  }

  // 修改
  public static void modifyson() {
    // 创建文件工厂实例
    documentbuilderfactory dbf = documentbuilderfactory.newinstance();
    dbf.setignoringelementcontentwhitespace(true);
    try {
      // 从xml文档中获取dom文档实例
      documentbuilder db = dbf.newdocumentbuilder();
      // 获取document对象
      document xmldoc = db.parse(xmlpath);

      // 获取根节点
      element root = xmldoc.getdocumentelement();
      // 定位id为001的节点
      element per = (element) selectsinglenode("/father/son[@id='001']",
          root);
      // 将age节点的内容更改为28
      per.getelementsbytagname("age").item(0).settextcontent("28");
      // 保存
      transformerfactory factory = transformerfactory.newinstance();
      transformer former = factory.newtransformer();
      former.transform(new domsource(xmldoc), new streamresult(new file(
          xmlpath)));
    } catch (exception e) {
      system.out.println(e.getmessage());
    }
  }

  // 获取目标节点,进行删除,最后保存
  public static void discardson() {

    documentbuilderfactory dbf = documentbuilderfactory.newinstance();
    dbf.setignoringelementcontentwhitespace(true);

    try {

      documentbuilder db = dbf.newdocumentbuilder();
      document xmldoc = db.parse(xmlpath);
      // 获取根节点
      element root = xmldoc.getdocumentelement();
      // 定位根节点中的id=002的节点
      element son = (element) selectsinglenode("/father/son[@id='002']",
          root);
      // 删除该节点
      root.removechild(son);
      // 保存
      transformerfactory factory = transformerfactory.newinstance();
      transformer former = factory.newtransformer();
      former.transform(new domsource(xmldoc), new streamresult(new file(
          xmlpath)));

    } catch (exception e) {
      system.out.println(e.getmessage());
    }
  }

  // 新增节点
  public static void createson() {
    // 创建文件工厂实例
    documentbuilderfactory dbf = documentbuilderfactory.newinstance();
    dbf.setignoringelementcontentwhitespace(false);

    try {

      documentbuilder db = dbf.newdocumentbuilder();
      // 创建document对象
      document xmldoc = db.parse(xmlpath);
      // 获取根节点
      element root = xmldoc.getdocumentelement();
      // 创建节点son,设置对应的id为004
      element son = xmldoc.createelement("son");
      son.setattribute("id", "004");
      // 创建节点name
      element name = xmldoc.createelement("name");
      name.settextcontent("小儿子");
      son.appendchild(name);
      // 创建节点age
      element age = xmldoc.createelement("age");
      age.settextcontent("0");
      son.appendchild(age);
      // 把son添加到根节点中
      root.appendchild(son);
      // 保存
      transformerfactory factory = transformerfactory.newinstance();
      transformer former = factory.newtransformer();
      former.transform(new domsource(xmldoc), new streamresult(new file(
          xmlpath)));

    } catch (exception e) {
      system.out.println(e.getmessage());
    }
  }

  // 修改节点信息
  public static node selectsinglenode(string express, element source) {
    node result = null;
    //创建xpath工厂
    xpathfactory xpathfactory = xpathfactory.newinstance();
    //创建xpath对象
    xpath xpath = xpathfactory.newxpath();
    try {
      result = (node) xpath.evaluate(express, source, xpathconstants.node);
      system.out.println(result);
    } catch (xpathexpressionexception e) {
      system.out.println(e.getmessage());
    }

    return result;
  }

  // 打印
  public static void main(string[] args) {

    getfamilymemebers();
    system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    modifyson();
    system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    system.out.println("修改数据");
    getfamilymemebers();
    system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    discardson();
    system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    system.out.println("删除数据");
    getfamilymemebers();
    system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    createson();
    system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    system.out.println("添加数据");
    getfamilymemebers();
  }
}

xml文件

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<father>
  <son id="001">
    <name>老大</name>
    <age>20</age>
  </son>
  <son id="002">
    <name>老二</name>
    <age>18</age>
  </son>
  <son id="003">
    <name>老三</name>
    <age>13</age>
  </son>

</father>

总结

以上就是本文关于java使用dom对xml文档进行增删改查操作实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网