Java实现——Dom4j读写XML文件

Java实现——Dom4j读写XML文件1.dom4j概述解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP。最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义。2.dom4j的使用2.1Doucment相关用法2.11解析XML文件,获得Document对象SAXReaderreader=newSAXReader();Docu……

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

1. dom4j概述

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

Java实现——Dom4j读写XML文件

2. dom4j的使用

2.1 Doucment相关用法

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

SAXReader reader = new SAXReader();
Document   document = reader.read(new File("input.xml"));

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

 String text = "<members></members>";
 Document document = DocumentHelper.parseText(text);

2.13 无脑自建Document对象

Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 创建根节点

2.2 节点相关用法

2.21 获得文档根节点

 Element rootElm = document.getRootElement();

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

Element memberElm = root.element("member");// "member"是节点名 root为某个节点

2.23 获得节点下的文字

String text = memberElm.getText();
String text = root.elementText("name");

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

List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
    Element elm = (Element) it.next();
   // do something
}

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

 for (Iterator it = root.elementIterator();it.hasNext();){
       Element element = (Element) it.next();
       // do something
 }

2.26 A节点下 Add/Delete B节点

Element B = A.addElement("age");
A.remove(B);

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

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

2.3 属性相关用法

2.31 取得根节点下的某属性

Element root=document.getRootElement();    
Attribute attribute=root.attribute("size");// 属性名name

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

String text=attribute.getText();

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

  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 设置某个节点的属性和文字

element.addAttribute("name", "sitinspring");

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

// 新建student.xml文件并新增内容
Document document = DocumentHelper.createDocument();
Element root = document.addElement("学生信息");
Element student = root.addElement("学生");
student.addAttribute("sid", "001");
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文件

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

String text = "<members> <member>sitinspring</member> </members>";
Document document = DocumentHelper.parseText(text);

2.52  XML To 字符串

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文件

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.net/159424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 业务测试用例模版与大数据测试用例模板

    业务测试用例模版与大数据测试用例模板前言:分享下业务测试用例模版与大数据测试用例模板业务测试用例模版与大数据测试用例模板一、业务测试用例模板二、业务测试用例模板一、业务测试用例模板需要下载模板请点击:业务测试用例模板下载二、业务测试用例模板需要下载模板请点击:大数据测试用例模板下载…

    2022年7月17日
    18
  • 一个java文件如何放两个public class 类「建议收藏」

    一个java文件如何放两个public class 类「建议收藏」publicclassMain{publicstaticvoidmain(String[]args){System.out.println(“HelloWorld!”);}publicclassTest1{}//正确}publicclassTest2{}//错误classTest3{}//正确////

    2022年5月22日
    51
  • java 的double转BigDecimal的坑

    java 的double转BigDecimal的坑大家都知道java的double由于精度问题会给你挖无数个坑,一般采取的方式都会避免使用,但是android的dbflow对model里面的BigDecimal转换为sqlitetable时,fieldtype居然是text.所以,model里面field的属性只能保持double那么,先测试一下:doubled=3.1415;…

    2022年5月27日
    38
  • JavaActivity工作流

    JavaActivity工作流一、什么是工作流以请假为例,现在大多数公司的请假流程是这样的员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑采用工作流技术的公司的请假流程是这样的员工使用账户登录系统——点击请假——上级登录系统点击允许就这样,一个请假流程就结束了有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案

    2022年5月27日
    537
  • 个人整理的一些net 开源项目

    个人整理的一些net 开源项目net开源商城:BrnMall地址 http://www.brnshop.com/ 技术架构很不错;官方提供技术支持,有博客有视频介绍;官方技术博客:http://www.cnblogs.com/wheretime/官方视频下载地址:http://pan.baidu.com/s/1dDCKQXj真乃业界良心之作;风格和天猫京东各大商城接近;后台都很好;

    2022年7月15日
    13
  • 使用Intellij Idea打包java为可执行jar包

    使用Intellij Idea打包java为可执行jar包自己在实际工作中的需要,使用Idea打包项目为可执行的jar包,网上找了好多文章但总是不成功,多次尝试后终于跑通,所以记录下来,希望可以帮助各位步骤:1.选中Java项目工程名称,在菜单中选择 File->projectstructure… (快捷键Ctrl+Alt+Shift+S)。2.在弹出的窗口中左侧选中”Artifacts”,点击”+”选择ja

    2022年6月17日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号