JAVA增删改查XML文件
最近总是需要进行xml的相关操作。
不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作。
读取XML配置文件
首先我们需要通过DocumentBuilderFactory获取xml文件的工厂实例。
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
创建文档对象
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(xmlPath); // 使用dom解析xml文件
最后遍历列表,进行数据提取
NodeList sonlist = doc.getElementsByTagName("son");
for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
{
Element son = (Element)sonlist.item(i);;
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);
}
}
}
全部代码
public static void getFamilyMemebers(){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(xmlPath); // 使用dom解析xml文件
NodeList sonlist = doc.getElementsByTagName("son");
for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
{
Element son = (Element)sonlist.item(i);;
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) {
e.printStackTrace();
}
}
在XML文件中增加节点
差不多同样的步骤,先获取根节点,创建一个新的节点,向其中添加元素信息,最后把这个新节点添加到根节点中
Element root = xmldoc.getDocumentElement();
//删除指定节点
Element son =xmldoc.createElement("son");
son.setAttribute("id", "004");
Element name = xmldoc.createElement("name");
name.setTextContent("小儿子");
son.appendChild(name);
Element age = xmldoc.createElement("name");
age.setTextContent("0");
son.appendChild(age);
root.appendChild(son);
最后不要忘记保存新增的文件,对源文件进行覆盖。
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
全部代码:
public static void createSon() {
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(false);
try{
DocumentBuilder db=dbf.newDocumentBuilder();
Document xmldoc=db.parse(xmlPath);
Element root = xmldoc.getDocumentElement();
//删除指定节点
Element son =xmldoc.createElement("son");
son.setAttribute("id", "004");
Element name = xmldoc.createElement("name");
name.setTextContent("小儿子");
son.appendChild(name);
Element age = xmldoc.createElement("name");
age.setTextContent("0");
son.appendChild(age);
root.appendChild(son);
//保存
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
}catch(Exception e){
e.printStackTrace();
}
}
在XML中修改节点信息
通过XPath来获取目标节点
public static Node selectSingleNode(String express, Element 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;
}
获取目标节点,进行修改,完成后,保存文件。
Element root = xmldoc.getDocumentElement();
Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
per.getElementsByTagName("age").item(0).setTextContent("27");
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
全部代码:
public static void modifySon(){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
try{
DocumentBuilder db=dbf.newDocumentBuilder();
Document xmldoc=db.parse(xmlPath);
Element root = xmldoc.getDocumentElement();
Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
per.getElementsByTagName("age").item(0).setTextContent("27");
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
}catch(Exception e){
e.printStackTrace();
}
}
删除XML中的节点
通过XPath获取目标节点, 进行删除,最后保存
Element root = xmldoc.getDocumentElement();
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)));
全部代码:
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();
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){
e.printStackTrace();
}
}
综上,基本XML的操作就如此了。下面是整合所有的代码,可以直接运行的,前提是在src下自己配好Xml文件。
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?><father>
<son id="001">
<name>老大</name>
<age>27</age>
</son>
<son id="002">
<name>老二</name>
<age>13</age>
</son>
<son id="003">
<name>老三</name>
<age>13</age>
</son>
</father>
xmlManage.java
package xmlManger; 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 xmlManage { private static String xmlPath = "E:\\Eclipse(Plugin)\\workspace\\xmlManger\\src\\family.xml"; public static void getFamilyMemebers(){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(xmlPath); // 使用dom解析xml文件 NodeList sonlist = doc.getElementsByTagName("son");
for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
{
Element son = (Element)sonlist.item(i);; 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) {
e.printStackTrace();
}
} public static void modifySon(){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
try{ DocumentBuilder db=dbf.newDocumentBuilder();
Document xmldoc=db.parse(xmlPath); Element root = xmldoc.getDocumentElement(); Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
per.getElementsByTagName("age").item(0).setTextContent("27"); TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
}catch(Exception e){
e.printStackTrace();
}
} 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(); 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){
e.printStackTrace();
}
} public static void createSon() {
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(false); try{ DocumentBuilder db=dbf.newDocumentBuilder();
Document xmldoc=db.parse(xmlPath); Element root = xmldoc.getDocumentElement(); //删除指定节点 Element son =xmldoc.createElement("son");
son.setAttribute("id", "004"); Element name = xmldoc.createElement("name");
name.setTextContent("小儿子");
son.appendChild(name); Element age = xmldoc.createElement("name");
age.setTextContent("0");
son.appendChild(age); root.appendChild(son);
//保存
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath))); }catch(Exception e){
e.printStackTrace();
}
} public static Node selectSingleNode(String express, Element 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;
} public static void main(String[] args){
getFamilyMemebers();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
modifySon();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
getFamilyMemebers();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
discardSon();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
getFamilyMemebers();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
createSon();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
getFamilyMemebers();
}
}
运行结果:

JAVA增删改查XML文件的更多相关文章
- 纯Java增删改查
//自己写的一个完整的带增删改查提交重置功能的表单代码.package com.l16.test5;import java.awt.Color;import java.awt.Container;im ...
- Redis之java增删改查
jedis是java的redis客户端实现,要使用jedis须要加入jedis的maven依赖: <dependency> <groupId>redis.clients< ...
- Linux增删改查移文件、文件夹
关于Linux中文件基本处理命令 (1)添加文件.文件夹(图例):touch Demo命令创建文件(Demo)为文件名. 即mkdir Temp命令为创建文件夹(Temp)为文件夹名. 创建文件.文件 ...
- JAVA 增删改查接口命名规范(dao层与 service 层
开发时,有很多规范,这里写的是命名规范. Dao 接口命名 insert batchInsert selectOne selectById count selectList update dele ...
- Java对XML文档的增删改查
JAVA增删改查XML文件 最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...
- 60分钟课程: 用egg.js实现增删改查,文件上传和restfulApi, webpack react es6 (一)
今天开始我将写nodejs框架egg.js, react 实现的增删改查,文件上传等常用的b/s场景,这个将分3部分来写. 会让你在60分钟内快速 入口并应用~ 你应该用es6, node,或是ph ...
- node 后台使用增删改查(4)
无论node还是java增删改查都是一样的原理,变得是配合框架使用时候有简便方法而已. 这里我接着上一篇开始讲,使用同一个数据库(数据库创建)这里必须创建了数据库 优化:为了维护方便这里我们把sql语 ...
- PHP-------smaty 增删改查
smaty 增删改查 smarty-----main文件夹,是放php文件的--------templates文件夹是放html文件的 我们访问的页面是php页面,PHP页面需要使用smarty模板, ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
随机推荐
- findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)
非常多朋友在开发Android JNI的的时候,会遇到findlibrary returned null的错误,由于某种原因,so没有打包到apk中.以下浅析下引起该错误的原因以及平台兼容性问题. A ...
- RBAC权限管理(转)
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- Bulk Load-HBase数据导入最佳实践
一.概述 HBase本身提供了非常多种数据导入的方式,通常有两种经常使用方式: 1.使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 2 ...
- 基于CentOS的MySQL学习补充四--使用Shell批量从CSV文件里插入数据到数据表
本文出处:http://blog.csdn.net/u012377333/article/details/47022699 从上面的几篇文章中,能够知道怎样使用Shell创建数据库.使用Shell创建 ...
- C++多态有哪几种方式?
C++多态方式: (1)静态多态(重载,模板) 是在编译的时候,就确定调用函数的类型. (2)动态多态(覆盖,虚函数实现) 在运行的时候,才确定调用的是哪个函数,动态绑定.运行基类指针指向派生类的对象 ...
- 如何实现php异步处理
在实际生成环境下,php作为后台的接口服务器已经很常见,php当然具有它能作为后台服务器的优势之处,但是,在处理一些客户端并不关心的结果时,就显出它的弊端了---没有异步执行的机制.就比如我们想做一些 ...
- Netty(七):流数据的传输处理
Socket Buffer的缺陷 对于例如TCP/IP这种基于流的传输协议实现,接收到的数据会被存储在socket的接受缓冲区内.不幸的是,这种基于流的传输缓冲区并不是一个包队列,而是一个字节队列.这 ...
- linode使用apt更新时停止的错误
使用ubuntu在更新系统时候,有时候会出现这样的问题: 0% [Connecting to security.ubuntu.com (2001:67c:1560:8001::14)] 问了下客户,他 ...
- 带密匙的php加密解密代码
php加密解密示例,代码如下: <?php $id = "http://www.jbxue.com"; $token = encrypt($id, 'E', 'jbxue') ...
- Python中模拟C# Linq的一些操作
闲来无事时积累的一些Linq函数,有时间就更新. 需要注意python版本如果低于3.0不支持lambda,只能单独写函数传参,比较麻烦 1.FirstOrDefault: def FirstOrDe ...