【java开发系列】—— JDOM创建、修改、删除、读取XML文件

简介:

有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。

JDOM下载地址

创建XML文档

  XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点。而每个子元素都是一个Element对象,对象可以向下包含。

  1 因此我们可以通过先创建元素再将元素添加到父元素中,最后将顶层元素添加到根元素中。

  2 创建完文档元素后,就可以把元素添加到document对象中,然后写入文件。

  主要使用的函数:

复制代码
Element.setAttribute 为元素添加信息

Element.addContent(String,String) 为元素添加子元素内容,也可以直接添加另一个元素节点

Document.setRootElement(Element) 为文档添加根元素

XMLOutputter.output(Document,FileWriter) 将Docuemnt写入到FileWriter文件流中
复制代码

 

  下面是主要的操作过程,写入文件的过程放到了saveXML中

复制代码
 1     @SuppressWarnings("null")
 2     public static void createXML() {
 3         // 创建document
 4         Document mydoc = new Document();
 5 
 6         // 创建元素person1
 7         Element person1 = new Element("person");
 8         person1.setAttribute("id", "ID001");
 9         // 添加注释
10         person1.addContent(new Comment("this is person1"));
11 
12         person1.addContent(new Element("name").setText("xingoo"));
13         person1.addContent(new Element("age").setText("25"));
14         person1.addContent(new Element("sex").setText("M"));
15         // 可以嵌套添加子元素
16         Element address1 = new Element("address");
17         address1.setAttribute("zone", "province");
18         address1.addContent("LiaoNing");
19         person1.addContent(address1);
20 
21         // 创建元素person2
22         Element person2 = new Element("person");
23         person2.setAttribute("id", "ID002");
24         // 添加注释
25         person2.addContent(new Comment("this is person2"));
26 
27         person2.addContent(new Element("name").setText("xhalo"));
28         person2.addContent(new Element("age").setText("26"));
29         person2.addContent(new Element("sex").setText("M"));
30         // 可以嵌套添加子元素
31         Element address2 = new Element("address");
32         address2.setAttribute("zone", "province");
33         address2.addContent("JiLin");
34         person2.addContent(address2);
35 
36         // 在doc中添加元素Person
37         Element info = new Element("information");
38         info.addContent(person1);
39         info.addContent(person2);
40         mydoc.setRootElement(info);
41         
42         saveXML(mydoc);
43     }
复制代码

saveXML()代码:

复制代码
 1     public static void saveXML(Document doc) {
 2         // 将doc对象输出到文件
 3         try {
 4             // 创建xml文件输出流
 5             XMLOutputter xmlopt = new XMLOutputter();
 6 
 7             // 创建文件输出流
 8             FileWriter writer = new FileWriter("person.xml");
 9 
10             // 指定文档格式
11             Format fm = Format.getPrettyFormat();
12             // fm.setEncoding("GB2312");
13             xmlopt.setFormat(fm);
14 
15             // 将doc写入到指定的文件中
16             xmlopt.output(doc, writer);
17             writer.close();
18         } catch (Exception e) {
19             e.printStackTrace();
20         }
21     }
复制代码

  执行后,刷新项目,就可以在项目下看到person.xml文件了。

读取XML文档

  读取文档,首先需要一个xml的解析器,它可以自动的解析出各个元素,并且把子元素作为自己的孩子节点,方便操作。

  主要使用的函数:

复制代码
SAXBuilder.build("xxx.xml") 解析XML文档

Document.getRootElement() 获取根元素

Element.getChildren() 获取根元素下的子元素,返回List<Element>

Element.getAttributeValue(String) 获取指定元素的信息

Element.getChildText 获取指定元素的内容
复制代码
复制代码
 1     public static void readXML() {
 2         // 使用SAXBuilder解析器解析xml文件
 3         SAXBuilder sb = new SAXBuilder();
 4         Document doc = null;
 5         try {
 6             doc = sb.build("person.xml");
 7             Element root = doc.getRootElement();
 8             List<Element> list = root.getChildren("person");
 9             for (Element el : list) {
10                 String id = el.getAttributeValue("id");
11                 String name = el.getChildText("name");
12                 String age = el.getChildText("age");
13                 String sex = el.getChildText("sex");
14                 System.out.println("id:" + id);
15                 System.out.println("name:" + name);
16                 System.out.println("age:" + age);
17                 System.out.println("sex:" + sex);
18                 System.out.println("--------------------------");
19             }
20         } catch (Exception e) {
21             e.printStackTrace();
22         }
23     }
复制代码

修改XML文档

  修改XML文档,也是先利用解析器找到指定的元素,使用setText或者setAttributeValue来修改元素内容

  修改后记得要保存到文件中,即在此调用saveXML()

复制代码
 1     public static void updateXML(){
 2         SAXBuilder sb = new SAXBuilder();
 3         Document doc = null;
 4         try {
 5             doc = sb.build("person.xml");
 6             Element root = doc.getRootElement();
 7             List<Element> list = root.getChildren("person");
 8             for (Element el : list) {
 9                 if (el.getAttributeValue("id").equals("ID001")) {
10                     Element name = el.getChild("name");
11                     name.setText("xingoo---update");
12                 }
13             }
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17         saveXML(doc);
18     }
复制代码

删除XML文档元素

  删除操作类似修改,调用removeCotent就可以根据内容删除指定的元素了。但是要用他的父节点调用。最后也需要保存到文件中才可以。

复制代码
 1     public static void removeXML() {
 2         SAXBuilder sb = new SAXBuilder();
 3         Document doc = null;
 4         try {
 5             doc = sb.build("person.xml");
 6             Element root = doc.getRootElement();
 7             List<Element> list = root.getChildren("person");
 8             for (Element el : list) {
 9                 if (el.getAttributeValue("id").equals("ID001")) {
10                     root.removeContent(el);
11                 }
12             }
13         } catch (Exception e) {
14             e.printStackTrace();
15         }
16         saveXML(doc);
17     }
复制代码

本文转自博客园xingoo的博客,原文链接:【java开发系列】—— JDOM创建、修改、删除、读取XML文件,如需转载请自行联系原博主。

相关文章
|
4天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
11 0
|
15天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
20 0
|
17天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
1月前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
31 1
|
1月前
|
Java
java中替换文件内容
java中替换文件内容
14 1
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
31 3
|
7天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
15 1
|
17天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
26 0
|
23天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。