前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java实现——Dom4j读写XML文件

Java实现——Dom4j读写XML文件

作者头像
全栈程序员站长
发布2022-09-14 19:00:10
1.1K0
发布2022-09-14 19:00:10
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

1. dom4j概述

解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP。最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义。

Java实现——Dom4j读写XML文件
Java实现——Dom4j读写XML文件

2. dom4j的使用

2.1 Doucment相关用法

2.11 解析XML文件,获得Document对象

代码语言:javascript
复制
SAXReader reader = new SAXReader();
Document   document = reader.read(new File("input.xml"));

2.12 解析字符串,获得Document对象

代码语言:javascript
复制
 String text = "<members></members>";
 Document document = DocumentHelper.parseText(text);

2.13 无脑自建Document对象

代码语言:javascript
复制
Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 创建根节点

2.2 节点相关用法

2.21 获得文档根节点

代码语言:javascript
复制
 Element rootElm = document.getRootElement();

2.22 获得某个节点下的指定子节点

代码语言:javascript
复制
Element memberElm = root.element("member");// "member"是节点名 root为某个节点

2.23 获得节点下的文字

代码语言:javascript
复制
String text = memberElm.getText();
代码语言:javascript
复制
String text = root.elementText("name");

2.24 遍历取得某节点下名为member的所有子节点

代码语言:javascript
复制
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
    Element elm = (Element) it.next();
   // do something
}

2.25 遍历取得某节点下的所有子节点

代码语言:javascript
复制
 for (Iterator it = root.elementIterator();it.hasNext();){
       Element element = (Element) it.next();
       // do something
 }

2.26 A节点下 Add/Delete B节点

代码语言:javascript
复制
Element B = A.addElement("age");
A.remove(B);

2.27 在根节点下添加一个CDATA节点

代码语言:javascript
复制
Element contentElm = root.addElement("content");
contentElm.addCDATA("Hello");
 // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
System.out.println("contentElm.getText() " + contentElm.getText());

2.3 属性相关用法

2.31 取得根节点下的某属性

代码语言:javascript
复制
Element root=document.getRootElement();    
Attribute attribute=root.attribute("size");// 属性名name

2.32 取得/设置为(Set)上面该属性的文字

代码语言:javascript
复制
String text=attribute.getText();

2.33 遍历根节点下的所有属性

代码语言:javascript
复制
  Element root=document.getRootElement();    
            for(Iterator it=root.attributeIterator();it.hasNext();){
                 Attribute attribute = (Attribute) it.next();
                 String text=attribute.getText();
                 System.out.println(text);
             }

2.34 设置某个节点的属性和文字

代码语言:javascript
复制
element.addAttribute("name", "sitinspring");

2.35 为某节点添加和删除属性

代码语言:javascript
复制
// 新建student.xml文件并新增内容
Document document = DocumentHelper.createDocument();
Element root = document.addElement("学生信息");
Element student = root.addElement("学生");
student.addAttribute("sid", "001");
代码语言:javascript
复制
Attribute attribute = <span style="font-family: 微软雅黑, sans-serif;">student</span>.attribute("sid");// 属性名name
<span style="font-family: 微软雅黑, sans-serif;">student</span><span style="font-family: 微软雅黑, sans-serif;">.remove(attribute);</span>

2.4 文档最后写入MXL文件

代码语言:javascript
复制
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");    // 指定XML编码        
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
writer.write(document);
writer.close();

2.5 字符串与XML的转换

2.51 字符串 To XML

代码语言:javascript
复制
String text = "<members> <member>sitinspring</member> </members>";
Document document = DocumentHelper.parseText(text);

2.52 XML To 字符串

代码语言:javascript
复制
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));            
Element root = document.getRootElement();                
String docXmlText = document.asXML();
String rootXmlText= root.asXML();
Element memberElm = root.element("member");
String memberXmlText = memberElm.asXML();

2.6 格式化转义字符问题请查看这篇链接文

3. 最后一个简单的小例子,看看注释和输出结果,很容易理解。就不多解释了。

程序连续运行两次输出结果如下:

Java实现——Dom4j读写XML文件
Java实现——Dom4j读写XML文件
Java实现——Dom4j读写XML文件
Java实现——Dom4j读写XML文件
代码语言:javascript
复制
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XML{
    public static void main(String[] args) {
        try {
            XMLWriter writer = null;// 声明写XML的对象
            SAXReader reader = new SAXReader();

            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");// 设置XML文件的编码格式

            String filePath = "d:\\student.xml";//文件路径
            File file = new File(filePath);
            if (file.exists()) {
                Document document = reader.read(file);// 读取XML文件
                Element root = document.getRootElement();// 得到根节点
                boolean add_new = false;
                for (Iterator i = root.elementIterator(); i.hasNext();) {
                    Element student = (Element) i.next();
                    if (student.attributeValue("sid").equals("001")) {
                        //获取并修改学生sid=001的学生信息
                    	Element info_num = student.element("编号");
                        System.out.println("sid为001的该属性名为 - " + info_num.getName());
                        System.out.println("sid为001的该属性值为 - " + info_num.getText());
                        
                        Element info_name = student.element("姓名");
                        System.out.println("sid为001的该属性名为 - " + info_name.getName());
                        System.out.println("sid为001的该属性值为 - " + info_name.getText());
                        
                        info_name.setName("外号");
                        info_name.setText("余小二");
                        System.out.println("sid为001的同学新属性名为 - " + info_name.getName());
                        System.out.println("sid为001的同学新属性值为 - " + info_name.getText());

                        writer = new XMLWriter(new FileWriter(filePath), format);
                        writer.write(document);
                        writer.close();
                        add_new = true;
                        break;
                    }
                }
                if (add_new) {
                    // 添加一个学生信息
                    Element student = root.addElement("学生");
                    student.addAttribute("sid", "100");
                    Element sid = student.addElement("编号");
                    sid.setText("100");
                    Element name = student.addElement("姓名");
                    name.setText("老大");
                    Element sex = student.addElement("性别");
                    sex.setText("男");
                    Element age = student.addElement("年龄");
                    age.setText("40");

                    writer = new XMLWriter(new FileWriter(filePath), format);
                    writer.write(document);
                    writer.close();
                }
            } else {
                // 新建student.xml文件并新增内容
                Document document = DocumentHelper.createDocument();
                Element root = document.addElement("学生信息");
                Element student = root.addElement("学生");
                student.addAttribute("sid", "001");
                Element id = student.addElement("编号");
                id.setText("001");
                Element name = student.addElement("姓名");
                name.setText("寂寞");
                Element age = student.addElement("年龄");
                age.setText("18");

                writer = new XMLWriter(new FileWriter(file), format);
                writer.write(document);
                writer.close();
            }
            System.out.println("操作结束! ");
        } catch (Exception e) {
            e.printStackTrace();
        }
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159424.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档