2019独角兽企业重金招聘Python工程师标准>>>

  最近总是需要进行xml的相关操作。

  不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作。

  读取XML配置文件

  首先我们需要通过DocumentBuilderFactory获取xml文件的工厂实例。

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();dbf.setIgnoringElementContentWhitespace(true);

  创建文档对象

1 DocumentBuilder db = dbf.newDocumentBuilder();
2             Document doc = db.parse(xmlPath); // 使用dom解析xml文件

  最后遍历列表,进行数据提取

 1 NodeList sonlist = doc.getElementsByTagName("son");
 2             for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
 3             {
 4                 Element son = (Element)sonlist.item(i);;
 5
 6                 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){
 7                     if (node.getNodeType() == Node.ELEMENT_NODE){
 8                         String name = node.getNodeName();
 9                         String value = node.getFirstChild().getNodeValue();
10                         System.out.println(name+" : "+value);
11                     }
12                 }
13             }

  全部代码

 1 public static void getFamilyMemebers(){
 2         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 3         dbf.setIgnoringElementContentWhitespace(true);
 4         try {
 5             DocumentBuilder db = dbf.newDocumentBuilder();
 6             Document doc = db.parse(xmlPath); // 使用dom解析xml文件
 7
 8             NodeList sonlist = doc.getElementsByTagName("son");
 9             for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
10             {
11                 Element son = (Element)sonlist.item(i);;
12
13                 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){
14                     if (node.getNodeType() == Node.ELEMENT_NODE){
15                         String name = node.getNodeName();
16                         String value = node.getFirstChild().getNodeValue();
17                         System.out.println(name+" : "+value);
18                     }
19                 }
20             }
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }

View Code

  在XML文件中增加节点

  差不多同样的步骤,先获取根节点,创建一个新的节点,向其中添加元素信息,最后把这个新节点添加到根节点中

 1 Element root = xmldoc.getDocumentElement();
 2
 3             //删除指定节点
 4
 5             Element son =xmldoc.createElement("son");
 6             son.setAttribute("id", "004");
 7
 8             Element name = xmldoc.createElement("name");
 9             name.setTextContent("小儿子");
10             son.appendChild(name);
11
12             Element age = xmldoc.createElement("name");
13             age.setTextContent("0");
14             son.appendChild(age);
15
16             root.appendChild(son);

  最后不要忘记保存新增的文件,对源文件进行覆盖。

1 TransformerFactory factory = TransformerFactory.newInstance();
2             Transformer former = factory.newTransformer();
3             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));

  全部代码:

 1     public static void createSon() {
 2         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 3         dbf.setIgnoringElementContentWhitespace(false);
 4
 5         try{
 6
 7             DocumentBuilder db=dbf.newDocumentBuilder();
 8             Document xmldoc=db.parse(xmlPath);
 9
10             Element root = xmldoc.getDocumentElement();
11
12             //删除指定节点
13
14             Element son =xmldoc.createElement("son");
15             son.setAttribute("id", "004");
16
17             Element name = xmldoc.createElement("name");
18             name.setTextContent("小儿子");
19             son.appendChild(name);
20
21             Element age = xmldoc.createElement("name");
22             age.setTextContent("0");
23             son.appendChild(age);
24
25             root.appendChild(son);
26             //保存
27             TransformerFactory factory = TransformerFactory.newInstance();
28             Transformer former = factory.newTransformer();
29             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
30
31         }catch(Exception e){
32             e.printStackTrace();
33         }
34     }

View Code

  在XML中修改节点信息

  通过XPath来获取目标节点

 1 public static Node selectSingleNode(String express, Element source) {
 2         Node result=null;
 3         XPathFactory xpathFactory=XPathFactory.newInstance();
 4         XPath xpath=xpathFactory.newXPath();
 5         try {
 6             result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
 7         } catch (XPathExpressionException e) {
 8             e.printStackTrace();
 9         }
10
11         return result;
12     }

  获取目标节点,进行修改,完成后,保存文件。

1 Element root = xmldoc.getDocumentElement();
2
3             Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
4             per.getElementsByTagName("age").item(0).setTextContent("27");
5
6             TransformerFactory factory = TransformerFactory.newInstance();
7             Transformer former = factory.newTransformer();
8             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));

  全部代码:

 1     public static void modifySon(){
 2         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 3         dbf.setIgnoringElementContentWhitespace(true);
 4         try{
 5
 6             DocumentBuilder db=dbf.newDocumentBuilder();
 7             Document xmldoc=db.parse(xmlPath);
 8
 9             Element root = xmldoc.getDocumentElement();
10
11             Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
12             per.getElementsByTagName("age").item(0).setTextContent("27");
13
14             TransformerFactory factory = TransformerFactory.newInstance();
15             Transformer former = factory.newTransformer();
16             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
17         }catch(Exception e){
18             e.printStackTrace();
19         }
20     }

View Code

  删除XML中的节点

  通过XPath获取目标节点, 进行删除,最后保存

1             Element root = xmldoc.getDocumentElement();
2
3             Element son =(Element) selectSingleNode("/father/son[@id='002']", root);
4             root.removeChild(son);
5
6             TransformerFactory factory = TransformerFactory.newInstance();
7             Transformer former = factory.newTransformer();
8             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));

  全部代码:

 1     public static void discardSon(){
 2
 3         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 4         dbf.setIgnoringElementContentWhitespace(true);
 5
 6         try{
 7
 8             DocumentBuilder db=dbf.newDocumentBuilder();
 9             Document xmldoc=db.parse(xmlPath);
10
11             Element root = xmldoc.getDocumentElement();
12
13             Element son =(Element) selectSingleNode("/father/son[@id='002']", root);
14             root.removeChild(son);
15
16             TransformerFactory factory = TransformerFactory.newInstance();
17             Transformer former = factory.newTransformer();
18             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
19
20         }catch(Exception e){
21             e.printStackTrace();
22         }
23     }


综上,基本XML的操作就如此了。下面是整合所有的代码,可以直接运行的,前提是在src下自己配好Xml文件。

XML

 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?><father>
 2     <son id="001">
 3         <name>老大</name>
 4         <age>27</age>
 5     </son>
 6     <son id="002">
 7         <name>老二</name>
 8         <age>13</age>
 9     </son>
10     <son id="003">
11         <name>老三</name>
12         <age>13</age>
13     </son>
14 </father>

xmlManage.java

  1 package xmlManger;
  2
  3 import java.io.File;
  4
  5 import javax.xml.parsers.DocumentBuilder;
  6 import javax.xml.parsers.DocumentBuilderFactory;
  7 import javax.xml.transform.Transformer;
  8 import javax.xml.transform.TransformerFactory;
  9 import javax.xml.transform.dom.DOMSource;
 10 import javax.xml.transform.stream.StreamResult;
 11 import javax.xml.xpath.XPath;
 12 import javax.xml.xpath.XPathConstants;
 13 import javax.xml.xpath.XPathExpressionException;
 14 import javax.xml.xpath.XPathFactory;
 15
 16 import org.w3c.dom.Document;
 17 import org.w3c.dom.Element;
 18 import org.w3c.dom.Node;
 19 import org.w3c.dom.NodeList;
 20
 21
 22
 23 public class xmlManage {
 24
 25     private static String xmlPath = "E:\\Eclipse(Plugin)\\workspace\\xmlManger\\src\\family.xml";
 26
 27
 28     public static void getFamilyMemebers(){
 29         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 30         dbf.setIgnoringElementContentWhitespace(true);
 31         try {
 32             DocumentBuilder db = dbf.newDocumentBuilder();
 33             Document doc = db.parse(xmlPath); // 使用dom解析xml文件
 34
 35             NodeList sonlist = doc.getElementsByTagName("son");
 36             for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
 37             {
 38                 Element son = (Element)sonlist.item(i);;
 39
 40                 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){
 41                     if (node.getNodeType() == Node.ELEMENT_NODE){
 42                         String name = node.getNodeName();
 43                         String value = node.getFirstChild().getNodeValue();
 44                         System.out.println(name+" : "+value);
 45                     }
 46                 }
 47             }
 48         } catch (Exception e) {
 49             e.printStackTrace();
 50         }
 51     }
 52
 53     public static void modifySon(){
 54         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 55         dbf.setIgnoringElementContentWhitespace(true);
 56         try{
 57
 58             DocumentBuilder db=dbf.newDocumentBuilder();
 59             Document xmldoc=db.parse(xmlPath);
 60
 61             Element root = xmldoc.getDocumentElement();
 62
 63             Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
 64             per.getElementsByTagName("age").item(0).setTextContent("27");
 65
 66             TransformerFactory factory = TransformerFactory.newInstance();
 67             Transformer former = factory.newTransformer();
 68             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
 69         }catch(Exception e){
 70             e.printStackTrace();
 71         }
 72     }
 73
 74     public static void discardSon(){
 75
 76         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 77         dbf.setIgnoringElementContentWhitespace(true);
 78
 79         try{
 80
 81             DocumentBuilder db=dbf.newDocumentBuilder();
 82             Document xmldoc=db.parse(xmlPath);
 83
 84             Element root = xmldoc.getDocumentElement();
 85
 86             Element son =(Element) selectSingleNode("/father/son[@id='002']", root);
 87             root.removeChild(son);
 88
 89             TransformerFactory factory = TransformerFactory.newInstance();
 90             Transformer former = factory.newTransformer();
 91             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
 92
 93         }catch(Exception e){
 94             e.printStackTrace();
 95         }
 96     }
 97
 98     public static void createSon() {
 99         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
100         dbf.setIgnoringElementContentWhitespace(false);
101
102         try{
103
104             DocumentBuilder db=dbf.newDocumentBuilder();
105             Document xmldoc=db.parse(xmlPath);
106
107             Element root = xmldoc.getDocumentElement();
108
109             //删除指定节点
110
111             Element son =xmldoc.createElement("son");
112             son.setAttribute("id", "004");
113
114             Element name = xmldoc.createElement("name");
115             name.setTextContent("小儿子");
116             son.appendChild(name);
117
118             Element age = xmldoc.createElement("name");
119             age.setTextContent("0");
120             son.appendChild(age);
121
122             root.appendChild(son);
123             //保存
124             TransformerFactory factory = TransformerFactory.newInstance();
125             Transformer former = factory.newTransformer();
126             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
127
128         }catch(Exception e){
129             e.printStackTrace();
130         }
131     }
132
133     public static Node selectSingleNode(String express, Element source) {
134         Node result=null;
135         XPathFactory xpathFactory=XPathFactory.newInstance();
136         XPath xpath=xpathFactory.newXPath();
137         try {
138             result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
139         } catch (XPathExpressionException e) {
140             e.printStackTrace();
141         }
142
143         return result;
144     }
145
146     public static void main(String[] args){
147         getFamilyMemebers();
148         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
149         modifySon();
150         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
151         getFamilyMemebers();
152         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
153         discardSon();
154         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
155         getFamilyMemebers();
156         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
157         createSon();
158         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
159         getFamilyMemebers();
160     }
161 }

View Code

运行结果:

转载于:https://my.oschina.net/u/204616/blog/545444

JAVA增删改查XML文件相关推荐

  1. 如何 增删改查 XML文件中的元素

    如何 增删改查 XML文件中的元素 students.xml 文件如下: <?xml version="1.0" encoding="UTF-8" sta ...

  2. JS+XMLDOM+XSL:实现中英文界面切换、排序、分页显示、增删改查XML文件数据源

    0. 有关JS.XMLDOM.XSLT的基础知识,可以参考我前面的三篇学习笔记: <JS学习笔记> <XML DOM学习笔记(JS) > <XSLT学习笔记 > 1 ...

  3. java map 输入 查询 修改_Mybatis增删改查mapper文件写法详解

    1. 插入 INSERT sql命令(命令里通过#{}获取对象属性) EG: INSERT INTO PRAC_PERSON(p_NAME,P_PASSWORD) VALUES(#{name},#{p ...

  4. mybatis实现增删改查xml配置和后端Java编程完整教程

    mybatis实现增删改查xml配置和后端编程教程 SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8&quo ...

  5. python制作一个密码簿_[python]制作密码薄,完成增删改查和文件存储功能。

    题目: 1)用文本编辑器编写一个密码簿文本文件,每一行格式为:姓名,密码 2)编写Python代码,提示:输入文件名,输入文件名后提示:查找,增加,删除,修改,保存 3)选择查找,输入姓名,提示&qu ...

  6. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例

    Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...

  7. 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!

    什么是Cookie? Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制. Cookie是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个co ...

  8. java增删改查代码_低代码开发平台

    Question 世界上有没有这种类型的软件开发项目? 可以做到: 对客户来说,可以让想法快速变成系统,几天内即可投入使用,产生价值. 对老板来说,可以以最低的成本获得最大的利益. 对程序员来说,可以 ...

  9. java增删改查 jsp生成_jsp+servlet实现最简单的增删改查代码分享

    话不多说,请看代码 package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; imp ...

最新文章

  1. Java程序员必须掌握的7个Java性能指标!
  2. ELK日志分析平台(elasticsearch)
  3. [BUUCTF-pwn]——suctf_2018_stack
  4. 初学SpringMVC,使用MVC进行文件上传
  5. rabbitmq python_Python操作RabbitMQ服务器实现消息队列的路由功能
  6. 前端学习(3334):ant design中加入icon
  7. SSH集成log4j日志环境
  8. Bootstrap框架学习
  9. ffmpeg相关资源
  10. C++调用 Json解析与处理库
  11. mui真机调试时无法查找到手机
  12. 西南科技大学OJ题 循环队列0965
  13. tailf追踪日志文件
  14. php5.2 zend解密,狐灵科技分享几款zend解密工具,可以解密zend5.2
  15. 学习外挂 -------- 成长过程(经典推荐)
  16. 网卡能通过usb接口与计算机连接吗,usb网卡怎么使用 usb网卡使用方法【图文】...
  17. 啦啦啦啦啦 报道 报道
  18. Tipask目录结构
  19. SQL server学习日志(二)创建表!手把手教你创建表,修改表,了解数据类型!超详细!
  20. 说话人识别VAD算法概述

热门文章

  1. Ubuntu16.04安装qt
  2. 【对讲机的那点事】关于对讲机锂电池你了解多少?
  3. document.getElementById与getElementByName的区别
  4. jquery拖拽实现UI设计组件
  5. Q币才是腾讯真正的世界级产品
  6. 关于IOS获取本地通讯录信息(包含iOS9.0前后)
  7. Numpy and Matplotlib
  8. Python脱产8期 Day02
  9. Linux--文件管理以及权限的修改
  10. 《Linux 高级程序设计(第三版)》——导读