//    使用dom4j对XML文档进行解析   CRUD
public class Demo1 { //读取XML文档中第二本书的书名 <书名>javaWEB</书名>
@Test
public void read() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml"); //拿到第二本书这个标签
Element secondBook = (Element) document.getRootElement().elements("书").get(1); //拿到书名
String bookName = secondBook.element("书名").getText(); //element 不带s 默认取第一个节点
// String bookName = secondBook.elementText("书名"); 也可以这样写 //拿到属性值
String value = secondBook.element("书名").attributeValue("name"); System.out.println(bookName + value);
} //在第一本书添加标签 <售价>49.00元</售价>
@Test
public void add() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml"); //拿到第一本书
Element book = document.getRootElement().element("书"); //添加标签
book.addElement("售价").setText("49.00元"); //更新XML文档
//为了避免乱码问题 设置格式化输出器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); //注意 如果用字节流 如:FileOutputStream,则只能依靠write去查码表 就可以设置输出的码表
//如果 用的是字符流 如:FileWriter 则调用write方法写document时 不会去查码表,而是这个字符流自己去查码表 默认查的是 gb2312
//所以 一般采用字节流,然后指定输出的码表
XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
write.write(document);
write.close(); }
//在第一本书 指定位置上 添加标签<售价>49.00元</售价>
@Test
public void add2() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml"); Element book = document.getRootElement().element("书"); //dom4j在指定位置插入一个标签 要在List集合中完成 ,把指定的需添加的标签放到List集合中的指定位置,后面的标签 会自动往后排
List list = book.elements();
Element newElemenrt = DocumentHelper.createElement("售价");
newElemenrt.setText("49.00元");
list.add(1,newElemenrt); OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
write.write(document);
write.close();
} //删除上面添加的售价节点(删除第一个出现的售价节点)
@Test
public void delete() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml"); Element element = document.getRootElement().element("书").element("售价");
element.getParent().remove(element); OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
write.write(document);
write.close();
} //更新第二本书的作者
@Test
public void update() throws Exception { SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml"); Element book2 = (Element) document.getRootElement().elements("书").get(1);
book2.element("作者").setText("徐泽昆"); OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
write.write(document);
write.close();
}
}

2.3 使用 dom4j 对 xml文件进行 dom 解析的更多相关文章

  1. xml文件使用DOM解析,报异常org.xml.sax.SAXParseException,"characterEncoding" 的引用必须以 ';' 分隔符结尾异常

    这个异常一般为xml文件对&的报错,只需要将&改为转义后的&amp即可解决

  2. 【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题

    首先 关于dom4j的API,有如下: 当然  其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: <project xmlns="ht ...

  3. 使用dom4j对xml文件进行增删改查

    1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...

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

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

  5. 使用dom4j 读取XML文件

    第一次接触dom4j的时候,感觉这个东西很神秘,因为之前虽然知道XML文件吧,但从来没有用过,一直感觉XML肯定不好操作.当得知,dom4j可以很容易的操作读取XML文件时,不免有些好奇,那么,用do ...

  6. DOM4J读取XML文件

    最近在做DRP的项目,其中涉及到了读取配置文件,用到了DOM4J,由于是刚开始接触这种读取xml文件的技术,好奇心是难免的,于是在网上又找了一些资料,这里就结合找到的资料来谈一下读取xml文件的4中方 ...

  7. 【DRP】採用dom4j完毕XML文件导入数据库

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lantingxv_jing/article/details/37762523     xml文件在如 ...

  8. DOM4J操作XML(包括封装和解析)

    DOM4J操作XML(包括封装和解析) 先来看看dom4j中相应XML的DOM树建立的继承关系 针对于XML标准定义.相应于图2-1列出的内容,dom4j提供了下面实现: 以下给出一个详细事例: pa ...

  9. 对xml文件的sax解析(增删改查)之一

    crud(增删改查): c:creat r:retrieve u:update d:delete 以下笔记来自于韩顺平老师的讲解. 现在是用java来操作. 第一步:新建java工程.file-new ...

随机推荐

  1. ios 本地模糊搜索

    /* 手机 选择区域 模型 */ #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface MYSelect ...

  2. Linux下的命令,删除文件夹下的所有文件,而不删除文件夹本身

    Linux下的命令,删除文件夹下的所有文件,而不删除文件夹本身 rm -rf *

  3. python封装和解构

    封装 将多个值使用逗号分割,组合在一起 本质上,返回一个元组,只是省略了小括号 python的特有的语法,被很多语言学习借鉴 t1 = (1,2) #定义元组 t2 = 1,2 #将1和2封装成元组 ...

  4. 关于react中遇到的问题记录说明

    5.el表达式 dataSource = (userPage, orgList) => userPage.map(item => { const org = orgList.find(or ...

  5. web框架初阶

    第一站 文件结构:web--- |--home.py #页面处理函数    |--index.py #主体函数 |--indexPlus.py #主体函数加强版 |--webdaem.py #通过we ...

  6. Eureka报错: Connect to localhost:8761 timed out

    最近整理配置Eureka时, 注册服务后, Eureka服务一直报出如下错误: 如下是我的单台eureka的 application.yml 配置: spring: application: name ...

  7. AbstractQueuedSynchronizer 源码解读(转载)

    转载文章,拜读了一下原文感觉很不错,转载一下,侵删 链接地址:http://objcoding.com/2019/05/05/aqs-exclusive-lock/ Java并发之AQS源码分析(一) ...

  8. poj1556 The Doors(叉积判断线段相交)

    题目链接:https://vjudge.net/problem/POJ-1556 题意:在一个矩形内,起点(0,5)和终点(10,5)是固定的,中间有n个道墙(n<=18),每道墙有两个門,求起 ...

  9. [CF798D]Mike and distribution_贪心

    Mike and distribution 题目链接:http://codeforces.com/problemset/problem/798/D 数据范围:略. 题解: 太难了吧这个题..... 这 ...

  10. [转帖]Oracle 起诉 Google 事件

    Oracle 起诉 Google 事件 https://www.cnblogs.com/panchanggui/p/9449842.html Oracle 是世界第二大软件公司 世界第一大DBMS公司 ...