jdom利用纯java技术对xml文档进行解析、生成、序列化等各种操作

Jdom对xml文档进行解析、生成、序列化等各种操作。

使用jdom之前,首先要导入jar包:jdom.jar 
获得根元素:

  • 首先确定xml文件位置

        String xmlPath = "./src/ceshi/Test.xml";
        //使用的解析器,这里表示默认的解析器
        SAXBuilder builder = new SAXBuilder(false);
        try {
            //得到Document,以后的操作都是Document操作的
            Document document = builder.build(xmlPath);
            //得到根元素
            Element root = document.getRootElement();
            } catch (JDOMException e) {
            e.printStackTrace();
        } 

Jdom得到的所有的节点,都是org.jdom.Element类,他的子节点也是org.jdom.Element类,得到的root是Element对象,直接输出System.out.println(root);显示:

[Element: <books/>]

  • Element的常用方法:

1、String  getName()  返回Element类的名称 

System.out.println(root.getName()); 结果 :books

2、String  getAttributeValue(Stringname)   获得属性值

System.out.println(root.getAttributeValue("size"));  结果:3

3、setAttribute(String name,String value)   设置属性值

4、removeAttribute(String name)  删除属性

5、getAttributes().clear()  清空所有属性

6、String  getText()  获得Element(当前节点)的值,当前节点必须是最后一级节点,否则返回空。

7、String  getTextTrim()  与getText()相同,只是去掉两边的空格

8、String  setText(String  name)  改变Element(当前节点)的值,当前节点必须是最后一级节点。这个只是对document的修改,并没有对实际的xml文档修改。若要修改实际的文档,需要使用XMLOutputter:

XMLOutputter outputter=new XMLOutputter();

outputter.output(document,new FileOutputStream(xmlPath));

9、Element  getChild(String  name)  获得指定名称的第一个元素

10、         removeChildren(String  name)  删除名称为name的子元素

11、         addContent(Element  e)   增加节点

  •  获得子元素值:

//获得根元素
   
输出为:

     Elementroot = document.getRootElement();
         //通过根元素,获得book元素
         Elementbook = root.getChild("book");
         //获得book元素的name节点的值(name节点必须为最底层元素,否则返回空)
      System.out.println(book.getChildTextTrim("name")); 

java开发

getChild()获得的是第一个元素。
获得所有属性:

节点可以获得自己的属性,对所有的属性进行遍历,然后转换为属性类型:

Attribute att = (Attribute) root.getAttributes().get(0);
        //获得属性名称
        System.out.println(att.getName());
        //获得属性值
    System.out.println(att.getValue()); 

  • 获得子节点集合:

1、 获得所有子节点

List childrens =root.getChildren();

        for(int i=0;i<childrens.size();i++){

           System.out.println(childrens.get(i));

       }

通过root.getChildren()得到的是一个List集合,集合中是Element对象:

[Element: <book/>]

[Element: <book/>]

[Element: <book/>]

得到的集合中的Element对象,需要进行类型转换才能作为Element操作:

Element child0 = (Element) childrens.get(0);

System.out.println(child0.getName());

例如,对books所有子节点book遍历属性:

List childrens = root.getChildren();

for(inti=0;i<childrens.size();i++){

     Element child= (Element) childrens.get(i);

     System.out.println(child.getAttributeValue("author"));

}

2、 获得指定名称的子节点

可以通过名称获得子节点,得到的同样是Element集合,并且是所有的名称为“name”的集合:

List childrens = book.getChildren("name");

生成xml文档:
使用java定义各个节点以及属性,然后生成xml文档:

       //定义所有节点
        Element root,student,number,name,age;        
        Element student2,number2,name2,age2;  
        
        //生成根元素:student-info
        root = new Element("student-info"); 
        
        //生成元素:student(number,name,age)      
        student = new Element("student");                       
        number = new Element("number");
        name = new Element("name");
        age = new Element("age");
        //生成元素:student2(number,name,age)      
        student2 = new Element("student2");               
        number2 = new Element("number2");
        name2 = new Element("name2");
        age2 = new Element("age2");
        //将根元素植入文档doc中
        Document doc = new Document(root); 
        
        //分别将两个student赋值,然后分别加载到root上
        number.setText("001");
        name.setText("zs");
        age.setText("24");
        number2.setText("002");
        number2.setAttribute(new Attribute("name","fxt"));//属性
        name2.setText("ls");
        age2.setText("50");
        student.addContent(number);
        student.addContent(name);
        student.addContent(age);
        student2.addContent(number2);
        student2.addContent(name2);
        student2.addContent(age2);
        root.addContent(student);
        root.addContent(student2);
        
        //定义格式:字符为gb2312,缩进为4个空格(若Format报错,说明版本太低,下载最  新jdom.jar即可)
        Format format = Format.getCompactFormat();
        format.setEncoding("gb2312"); 
        format.setIndent("    "); 
        
        //输出新文件,若已存在,则覆盖
        XMLOutputter XMLOut = new XMLOutputter(format);
        XMLOut.output(doc, new FileOutputStream("./src/ceshi/jdomTest2.xml"));  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

资本热捧下的预制菜,如何挤出泡沫、回归务实?

在这个被快餐和即食文化主宰的时代&#xff0c;预制菜概念持续被资本热炒。 据悉&#xff0c;近30个交易日里&#xff0c;预制菜概念板块已累计上涨超15%&#xff0c;其中&#xff0c;惠发食品、得利斯、春雪食品等个股更是快速拉涨。但究竟谁才能笑到最后&#xff0c;还充满未…

数据结构和算法 - 数组

1、数组 1.1 简介 什么是数组&#xff1f; 他优缺点是什么&#xff1f;具体应用有哪些&#xff1f; 「数组 array」是一种基于顺序存储的线性数据结构&#xff0c;其将相同类型的元素存储在连续的内存空间中。我们将元素在数组中的位置称为该元素的「索引 index」。 如图&…

IDEA卡顿,进行性能优化设置(亲测有效)——情况一

需求场景 IDEA重新激活后&#xff0c;运行IDEA卡的非常卡顿&#xff0c;没有运行项目&#xff0c;CPU占比也非常高: 原因分析 可能的原因是&#xff0c;在IDEA的配置中&#xff0c;给他分配的空间比较小 解决方式 步骤一 选择顶部导航栏中的Help&#xff0c;然后点击Edi…

Java数据类型相关

数据类型 Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类 型&#xff0c;在内存中分配了不同大小的内存空间。 分类&#xff1a; 基本数据类型 数值型 整数类型(byte,short,int,long) 浮点类型(float,dou…

文本处理工具doctran(集成LLM和NLP库)

今天给大家推荐一款文本处理工具&#xff0c;可以Extract、Redact、Summarize、Refine、Translate、Interrogate&#xff0c;这个工具就是文档转换框架doctran。 欢迎关注公众号 doctran基于OpenAI的GPT模型和开源的NLP库来剖析文本数据。该工具也可以在LangChain框架document…

汇编指令命令

ARM汇编指令学习 工程搭建 汇编编程环境搭建 HN0AE-522LW-NNRAF-63PUS-7IGFH-YF58D 配置编译工具链 为工程配置链接脚本&#xff08;map.lds&#xff09; 将map.lds 复制到工程文件夹(在桌面创建的ARM-ASM文件) 创建汇编文件 接下来我们需要建立一个start.s汇编文件添加到我们的…

基于Microchip 光伏逆变器方案

小编杂谈新能源已经完成了至少5期的博文了&#xff0c;Boss告诉小编&#xff0c;如果还不介绍我们的产品和方案&#xff0c;黄花菜都凉了&#xff0c;所以小编这期博文就重点介绍一下Microchip在储能上的产品介绍&#xff0c;重点聊聊Microchip储能中使用的光伏逆变器的解决方案…

沉浸文旅体验!实时云渲染助力2023广东旅博会智慧文旅元宇宙体验馆上线

2023广东国际旅游产业博览会&#xff08;以下简称旅博会&#xff09;于9月15-17日在广州中国进出口商品交易会展馆A区举办&#xff0c;共设有国际展区、国内展区、智慧文旅展区、文化创意展区、旅游商品展区等五大展区&#xff0c;汇聚了来自全球近40个国家和地区的近千家参展商…

综述 2022-Genome Biology:“AI+癌症multi-omics”融合方法benchmark

Leng, Dongjin, et al. "A benchmark study of deep learning-based multi-omics data fusion methods for cancer." Genome biology 23.1 (2022): 1-32. 被引次数&#xff1a;34作者单位 红色高亮表示写论文中可以借鉴的地方 一、方法和数据集 1. 3个数据集&…

【✅如何针对大Excel做文件读取?】

✅如何针对大Excel做文件读取&#xff1f; &#x1f7e9;如何针对大Excel做文件读取&#x1f7e9;XSSFWorkbook文件读取&#x1f7e9;EasyExcel文件读取 ✅扩展知识&#x1f7e9; EasyExcel简介&#x1f7e9;EasyExcel 为什么内存占用小&#xff1f; &#x1f7e9;如何针对大Ex…

MySQL使用Not in查询效率慢的优化

引言 问题复盘&#xff0c;在查询某个数据不在另一个表中&#xff0c;查询时间非常慢&#xff0c;10几秒。究其原因not in不走索引。那么怎么解决优化呢&#xff0c;下面是简单记录。 原SQL select * from test where a not in ( select a from test2 where status in (1, 2…

由@EnableWebMvc注解引发的Jackson解析异常

同事合了代码到开发分支&#xff0c;并没有涉及到改动的类却报错。错误信息如下&#xff1a; Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.conv…

重新认识Word——给图、表、公式等自动编号

重新认识Word——给图、表、公式等自动编号 给图增加题注题注失败的情况给图添加“如图xx-xx所示” 给公式插入题注第一步——先加题注第二步——设置两个制表符 解决题注“图一-1”的问题 前面我们已经学习了如何引用多级列表自动编号了&#xff0c;现在我们有第二个问题&…

数字病理图像分析的开源软件qupath学习 ①

介绍&#xff1a;QuPath是一种新的生物图像分析软件&#xff0c;旨在满足对用户友好、可扩展、开源解决方案日益增长的需求&#xff0c;用于数字病理学和全玻片图像分析。除了提供全面的肿瘤识别和高通量生物标志物评估工具外&#xff0c;QuPath 还为研究人员提供了强大的批处理…

怎么抠图换背景?这三个方法让你轻松抠图

怎么抠图换背景&#xff1f;抠图是每个独立站商家每天必不可少的工作&#xff0c;简单一张图用PS进行抠图还好&#xff0c;但如何多张图&#xff0c;用PS就效率非常低&#xff0c;且需要专业的PS技能才能上手实现精准抠图的目的&#xff0c;那么怎么快速抠图换背景呢&#xff0…

【MySQL学习】概述

文章目录 1. mysql的启动和停止命令2. 客户端连接3. 数据模型 1. mysql的启动和停止命令 通过指令启动或停止&#xff0c;以管理员身份运行cmd&#xff0c;进入命令行执行如下指令&#xff1a; &#xff08;1&#xff09;启动myaql net start mysql&#xff08;2&#xff09;…

TikTok科技趋势:平台如何引领数字社交革命?

TikTok作为一款颠覆性的短视频应用&#xff0c;不仅改变了用户的娱乐方式&#xff0c;更在数字社交领域引领了一场革命。本文将深入探讨TikTok在科技趋势方面的引领作用&#xff0c;分析其在数字社交革命中的关键角色&#xff0c;以及通过技术创新如何不断满足用户需求&#xf…

虚拟化嵌套

在理论上,可以在虚拟机(VM)内运行一个hypervisor,这个概念被称为嵌套虚拟化: 我们将第一个hypervisor称为Host Hypervisor,将VM内的hypervisor称为Guest Hypervisor。 在Armv8.3-A发布之前,可以通过在EL0中运行Guest Hypervisor来在VM中运行Guest Hypervisor。然而,这…

智能冶钢厂环境监控与设备控制系统(边缘物联网网关)

目录 1、项目背景 2、项目功能介绍 3、模块框架 3.1 架构框图 3.2 架构介绍 4、系统组成与工作原理 4.1 数据采集 4.2 指令控制 4.3 其他模块 4.3.1 网页、qt视频流 4.3.2 qt搜索进程 5、成果呈现 6、问题解决 7、项目总结 1、项目背景 这个项目的背景是钢铁行业的…

从入门到精通:掌握Spring IOC/DI配置管理第三方bean的技巧

IOC/DI配置管理第三方bean 1.1 案例:数据源对象管理1.1.1 环境准备1.1.2 思路分析1.1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.1.4 实现C3P0管理步骤1:导入C3P0的依赖步骤2:配置第三方bean步骤3:运行程…