如何进行dom4j解析及解决写入XML文档时的乱码问题
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,如何进行dom4j解析及解决写入XML文档时的乱码问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。book.xml
千家信息网最后更新 2025年01月23日如何进行dom4j解析及解决写入XML文档时的乱码问题
如何进行dom4j解析及解决写入XML文档时的乱码问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
book.xml
<书架> <书> <书名>Java就业基础教程书名> <作者>张孝祥作者> <售价>48元售价> <售价>58元售价> 书> <书> <书名>JavaScript网页开发书名> <作者>黎活明作者> <售价>46元售价> 书> 书架>
Dom4j.java
package yyy.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class Dom4j { private File file = new File("src/book.xml"); //遍历xml文档 @Test public void testList() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read(file); Element root = document.getRootElement(); list(root); } public void list(Element element){ System.out.println(element.getName()); Listnodes = element.elements(); //System.out.println(nodes.size()); for(Node node : nodes){ if(node instanceof Element){ list((Element) node); } } } //读取某个节点的值 @Test public void read() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read(file); Element root = document.getRootElement(); Element price = root.element("书").element("作者"); String value = price.getText(); System.out.println(value); } //添加某个节点 @Test public void add() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read(file); Element price = DocumentHelper.createElement("售价"); //创建新的节点 price.setText("44元"); //设置节点值 Element root = document.getRootElement(); root.element("书").add(price); //添加节点 //将内存中的document对象重新写入xml文档 特别要注意乱码问题 //方法1:使用OutputStreamWriter设置写入文档时所使用的编码表 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file),"utf-8"); [xss_clean](out); out.close(); /*//方法2: OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); XMLWriter writer = new XMLWriter(new FileWriter(file),format); writer.write(document); writer.close();*/ /*//方法3: OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8"),format); writer.write(document); writer.close();*/ /*//方法4: OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); //源文档用"gb2312"编码,既不改变源文档的编码格式,又不能有乱码 XMLWriter writer = new XMLWriter(new FileOutputStream(file),format); writer.write(document); writer.close();*/ /*//document对象在内存中是以"UTF-8"编码形式存在,用FileWriter将document对象以字符流的形式写入xml文档默认是用本地码表"gb2312"编码 * 乱码问题总结: * 1.用字符流向文件写入数据要考虑乱码问题,而用字节流就不必考虑乱码问题 * 用字符流向文件写入数据默认使用本地码表即"gb2312" * 2.任何对象读入内存都是以"UTF-8"编码的形式存在 * 默认情况下XMLWriter的write方法是以"UTF-8"的编码形式将内存中的document对象传给FileWriter,所以要想不发生乱码问题, * 就要使用包装流OutputStreamWriter并给定写入文件时所使用的编码表,或者使用OutputFormat的setEncoding方法指定传给 * 流对象时所使用的编码格式。 * */ } //向指定位置添加节点 @Test public void add2() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read(file); Element root = document.getRootElement(); Element price = DocumentHelper.createElement("售价"); price.setText("48元"); List list = root.element("书").elements(); list.add(2,price); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileOutputStream(file),format); writer.write(document); writer.close(); } //删除某个节点 @Test public void delete() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read(file); Element root = document.getRootElement(); Element price = root.element("书").element("售价"); price.getParent().remove(price); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileOutputStream(file),format); writer.write(document); writer.close(); } //更改某个节点的内容 @Test public void update() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read(file); Element root = document.getRootElement(); Element price = root.element("书").element("售价"); price.setText("58元"); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileOutputStream(file),format); writer.write(document); writer.close(); } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
节点
乱码
文档
编码
问题
对象
方法
内存
售价
形式
码表
文件
用字
UTF-8
内容
数据
格式
utf-8
帮助
清楚
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库管理员高级资格
工业网络技术论文格式
计算机软件开发公司有什么要求
赫美联合互联网科技
水利信息化网络安全指导意见
查询一天前的数据库表操作记录
中国平安互联网科技事业部
服务器自行管理
聚谦软件开发有限公司招聘
msql数据库
昆山美旺网络技术
普陀区个性化软件开发推荐
游戏中不同服务器什么意思
mysql数据库生成序列
企业网络安全演练方案
国家反诈未找到服务器
前几年网络安全形势
移动公司软件开发工资多少钱
什么是时间序列数据库
外部文件怎么导入数据库
战地1找服务器
中国2g网络技术
搞软件开发员工工资构成
mysql数据库是免费的吗
网络安全评估一直待审查
锐珂医疗的软件开发职位怎么样
不能导出数据库文件夹
ssms连接不上数据库
是网络安全事件吗
如何访问ecs数据库