转自:https://www.aliyun.com/jiaocheng/1339446.html

 xml文件:
<?xml version="1.0" encoding="GBK"?> <phoneinfo>
<brand name="小米" id="1">
<type name="MI5"/>
<type name="NOTE"/>
<type name="MI5S"/>
</brand>
<brand name="华为" id="2">
<type name="荣耀8"/>
<type name="荣耀8plus"/>
</brand>
<brand name="苹果" id="3">
<type name="iphone7"/>
<type1 name="iphone6"/>
</brand>
</phoneinfo> 用dom4j解析xml文件
package com.hfxt; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; //dom4j解析xml并且执行(增、删、改、查)操作
public class dom4jXmlDemo { private Document document; public static void main(String[] args){
dom4jXmlDemo domXml = new dom4jXmlDemo();
domXml.getDom();
domXml.addPhoneInfo();
domXml.updatePhoneInfo();
//domXml.deletePhoneInfo();
domXml.showPhoneInfo(); } //获取DOM树
public void getDom(){
SAXReader reader = new SAXReader();
try {
document = reader.read(new File("phoneinfo.xml"));
} catch (DocumentException e) {
e.printStackTrace();
}
} //增加手机信息
public void addPhoneInfo(){
//获取根节点元素
Element element = document.getRootElement();
//添加brand节点
Element brand = element.addElement("brand");
//为brand添加属性并且赋值
brand.addAttribute("name","苹果");
//添加type节点
Element type = brand.addElement("type");
Element type1 = brand.addElement("type1");
//为type节点添加name属性并且赋值
type.addAttribute("name","iphone7");
type1.addAttribute("name","iphone6");
saveXml("phoneinfo.xml");
} //删除手机信息
public void deletePhoneInfo(){
//获取根节点
Element element = document.getRootElement();
Iterator brand = element.elementIterator();
//遍历获取每个节点信息
while(brand.hasNext()){
Element eleBrand = (Element)brand.next();
//删除name为苹果的brand
if(eleBrand.attributeValue("name").equals("苹果")){
eleBrand.getParent().remove(eleBrand);
}
}
//保存信息
saveXml("phoneinfo.xml");
} //修改手机信息
public void updatePhoneInfo(){
//获取手机信息
Element element = document.getRootElement();
Iterator brand = element.elementIterator();
int id = 0;
while(brand.hasNext()){
Element eleBrand = (Element)brand.next();
id++;
eleBrand.addAttribute("id",id+"");
}
saveXml("phoneinfo.xml");
} //显示手机信息
public void showPhoneInfo(){
//获取根节点
Element element = document.getRootElement();
Iterator brand = element.elementIterator();
while(brand.hasNext()){
Element eleBrand = (Element)brand.next();
//根据name属性获取对应的值的名字
System.out.println(eleBrand.attributeValue("name"));
//获取type节点
Iterator type = eleBrand.elementIterator();
//遍历所有type节点
while(type.hasNext()){
Element eleType = (Element)type.next();
System.out.println("\t"+eleType.attributeValue("name"));
}
}
} //保存信息到xml
public void saveXml(String path){
//格式化
OutputFormat format = OutputFormat.createPrettyPrint();
//指定字符编码格式
format.setEncoding("GBK");
XMLWriter writer = null;
//将文件按照指定格式输出到指定路径中
try {
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path)),format);
writer.write(document);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//关闭服务
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
  • 用dom4j解析xml文件并执行增删改查操作
  •  

用dom4j解析xml文件并执行增删改查操作的更多相关文章

  1. 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

    一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...

  2. XML基本概念及增删改查操作

    一.概念及特征: 1. XML 指可扩展标记语言(Extensible Markup Language),用户可以自己定义标签.XML 被设计用来传输和存储数据,而 HTML 用于格式化并显示数据,并 ...

  3. Python3练习:对员工信息文件,实现增删改查操作

    1.练习要求: 2.数据文件(data_staff.txt) 1,Alex Li,22,13651054684,运维,2013-02-04 2,Jack Wang,20,13312331232,HR, ...

  4. Python3.5 day4作业:对员工信息文件,实现增删改查操作。

    需求: 1.可进行模糊查询,语法至少支持下面3种: 1.select name,age from staff_table where age > 22 2.select  * from staf ...

  5. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  6. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  7. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

  8. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

  9. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

随机推荐

  1. c++ 中一个类或者一个对象所占的字节数

    转载博客:转载地址https://www.cnblogs.com/JingHuanXiao/p/6080726.html 一个空的class在内存中多少字节?如果加入一个成员函数后是多大?这个成员函数 ...

  2. 【MySQL】通信协议

    1.TCP/IP(Transmission Control Protocol/Internet Protocol) 该通信协议套件用于连接 Internet 上的主机.在 Linux 操作系统中,TC ...

  3. Assembly之instruction之JUMP

    JMP  Jump unconditionally Syntax   JMP  label Operation PC + 2 × offset −> PC Description The 10- ...

  4. centos开机运行级别更改

    1.使用命令切换运行级别/目标 # systemctl isolate multi-user.target //切换到运行级别3,该命令对下次启动无影响,等价于telinit 3 # systemct ...

  5. error C3859: 超过了PCH的虚拟内存范围;请使用“-Zm33”或更大的命令行选项重新编译

    编译 ORB_SLAM的Release版本时,出现了此问题: 错误 2 error C3859: 超过了 PCH 的虚拟内存范围;请使用"-Zm465"或更大的命令行 修改方法: ...

  6. 多开 MFC线程

    序言:我才编程几年啊!就要处理多线程.对于只写函数的我,这难度简直了!不过MFC的多线程,貌似比较简单,还能处理的了. (1).开MFC多个线程 在视频采集的过程中,如果不使用媒体计数器,会造成主线程 ...

  7. 需要知道的TCP/IP三次握手

    TCP/IP三次握手是TCP协议中比较重要的一个知识点,但是在很多博客中看到的三次握手的过程图很多都不是很正确.我在google找到了一篇写的非常不错的介绍TCP/IP技术文章期中就有三次握手的讲解, ...

  8. css单双行样式

    #random_box li:nth-child(odd) {//双行 background: #fff5c4; } #random_box li:nth-child(even) {//单行 back ...

  9. Why use Cache-Control header in request?

    本地缓存也是缓存代理的一部分. 请求时使用Cache-Control 表示缓存的使用策略. 请求头里的no-cache表示浏览器不想读缓存,并不是说没有缓存.一般在浏览器按ctrl+F5强制刷新时,请 ...

  10. 【转载】Java 集合详解

    转载:https://www.cnblogs.com/ysocean/p/6555373.html 一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段 ...