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 ...
随机推荐
- 阿里云rds linux平台使用wget 工具下载备份与日志文件
1. 获取备份下载地址 RDS 控制台 备份恢复 数据备份,选择需要下载的备份集,点击“下载”. 点击“复制内网地址” 或 “复制外网地址” 来获取备份的 内网 或 外网 下载地址. 日志备份的地 ...
- WCF深入浅出学习1
1.本文主要对WCF的基本使用做简单化介绍,对于初学WCF的来说,初期对于配置文件的理解,比较烦躁吧,相信你看完了该文,能够达到深入浅出的感觉. 关于WCF的概念 和 应用场景,在此处不做详细介绍,可 ...
- cat /proc/iomem
在proc目录下有iomem和ioports文件,其主要描述了系统的io内存和io端口资源分布. 对于外设的访问,最终都是通过读写设备上的寄存器实现的,寄存器不外乎:控制寄存器.状态寄存器和数据寄存器 ...
- STL六大组件简介
一.STL简介 (一).泛型程序设计 泛型编程(generic programming) 将程序写得尽可能通用 将算法从数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 (二 ...
- hdu 4779 Tower Defense (思维+组合数学)
Tower Defense Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) ...
- blender, 旋转和平移视图
旋转视图:MMB(鼠标中键) 平移视图:shift+MMB
- jquery判断元素的子元素是否存在
jquery判断元素的子元素是否存在的示例代码. jquery判断子元素是否存在 一.判断子元素是否存在 //一级子元素 if($("#specialId>img").len ...
- atitit.自动生成数据库结构脚本,或者更换数据库,基于hibernate4
atitit.自动生成数据库结构脚本,或者更换数据库,基于hibernate4 目前近况:: 更换数据库,但是是使用spring集成的. <!-- hibernate配置文件路径 --> ...
- PCH简单介绍
https://wenku.baidu.com/view/3c9c5f190a4e767f5acfa1c7aa00b52acfc79cb0.html
- Delphi记录record中的变体
program Day4; {$APPTYPE CONSOLE} uses SysUtils, Util in 'Util.pas'; type TPerson = packed record ID ...