JAVA增删改查XML文件
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文件相关推荐
- 如何 增删改查 XML文件中的元素
如何 增删改查 XML文件中的元素 students.xml 文件如下: <?xml version="1.0" encoding="UTF-8" sta ...
- JS+XMLDOM+XSL:实现中英文界面切换、排序、分页显示、增删改查XML文件数据源
0. 有关JS.XMLDOM.XSLT的基础知识,可以参考我前面的三篇学习笔记: <JS学习笔记> <XML DOM学习笔记(JS) > <XSLT学习笔记 > 1 ...
- java map 输入 查询 修改_Mybatis增删改查mapper文件写法详解
1. 插入 INSERT sql命令(命令里通过#{}获取对象属性) EG: INSERT INTO PRAC_PERSON(p_NAME,P_PASSWORD) VALUES(#{name},#{p ...
- mybatis实现增删改查xml配置和后端Java编程完整教程
mybatis实现增删改查xml配置和后端编程教程 SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8&quo ...
- python制作一个密码簿_[python]制作密码薄,完成增删改查和文件存储功能。
题目: 1)用文本编辑器编写一个密码簿文本文件,每一行格式为:姓名,密码 2)编写Python代码,提示:输入文件名,输入文件名后提示:查找,增加,删除,修改,保存 3)选择查找,输入姓名,提示&qu ...
- java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例
Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...
- 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!
什么是Cookie? Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制. Cookie是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个co ...
- java增删改查代码_低代码开发平台
Question 世界上有没有这种类型的软件开发项目? 可以做到: 对客户来说,可以让想法快速变成系统,几天内即可投入使用,产生价值. 对老板来说,可以以最低的成本获得最大的利益. 对程序员来说,可以 ...
- java增删改查 jsp生成_jsp+servlet实现最简单的增删改查代码分享
话不多说,请看代码 package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; imp ...
最新文章
- Java程序员必须掌握的7个Java性能指标!
- ELK日志分析平台(elasticsearch)
- [BUUCTF-pwn]——suctf_2018_stack
- 初学SpringMVC,使用MVC进行文件上传
- rabbitmq python_Python操作RabbitMQ服务器实现消息队列的路由功能
- 前端学习(3334):ant design中加入icon
- SSH集成log4j日志环境
- Bootstrap框架学习
- ffmpeg相关资源
- C++调用 Json解析与处理库
- mui真机调试时无法查找到手机
- 西南科技大学OJ题 循环队列0965
- tailf追踪日志文件
- php5.2 zend解密,狐灵科技分享几款zend解密工具,可以解密zend5.2
- 学习外挂 -------- 成长过程(经典推荐)
- 网卡能通过usb接口与计算机连接吗,usb网卡怎么使用 usb网卡使用方法【图文】...
- 啦啦啦啦啦 报道 报道
- Tipask目录结构
- SQL server学习日志(二)创建表!手把手教你创建表,修改表,了解数据类型!超详细!
- 说话人识别VAD算法概述