//    使用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. mongodb 报错 not authorized on admin to execute command【 version 3.2.18 】

    mongodb version 3.2.18 测试问题: 分析: 从报错内容上看是权限不够,但不明了为什么,因为已经使用的超级用户权限: { "_id" : "admin ...

  2. mfc通过信号量保证线程同步

    1.声明一个全局handle,记住在cpp里也声明 extern HANDLE uiHandle; 2.创建信号量 uiHandle = CreateSemaphore(NULL,1,1,NULL); ...

  3. java nio 缓冲区读写数据(图形详解)

    Position 您可以回想一下,缓冲区实际上就是美化了的数组.在从通道读取时,您将所读取的数据放到底层的数组中. position 变量跟踪已经写了多少数据.更准确地说,它指定了下一个字节将放到数组 ...

  4. [Python]编译错误:编码错误问题(SyntaxError: (unicode error) )

    1 错误信息 python文件 1 #coding:utf-8 2 3 class Clz: 4 def func(filePath): 5 """ 6 func 7 - ...

  5. Java使用jxl写入Excel文件

    首先添加jxl的maven依赖: <!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl --> < ...

  6. LODOP纸张高度不定的纯文本累计高度

    小票由于纸张没有确定的高度,根据内容多少,小票打印机出多少纸,在设置纸张的时候,需要把纸张设置成不定高的纸张.简短问答:小票打印 ,参考样例18 http://www.c-lodop.com/demo ...

  7. windows下初安装xgboost

    1.先检查一下自己的版本,如图python3.6,win64 我的之前环境是已经安装了anaconda. 2.去相关的网站下载 3.把下载的文件拷到此目录下(同pip在一个目录下) 4.cmd在此目录 ...

  8. [Tensorflow] 使用 tf.train.Checkpoint() 保存 / 加载 keras subclassed model

    在 subclassed_model.py 中,通过对 tf.keras.Model 进行子类化,设计了两个自定义模型. import tensorflow as tf tf.enable_eager ...

  9. sql注入01

    1.SLQ:操作数据 数据库结构 create/drop database create/alter/drop table 数据库内容 insert values语句 insert into tabl ...

  10. arduino系列文章

    arduino系列文章 1.Arduino基础入门篇-进入Arduino的世界 2.关于使用Arduino做开发的理解 3.详解Arduino Uno开发板的引脚分配图及定义(重要且基础) 4.Ard ...