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"));  

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KMP算法数组下标从0和数组下标从1开始

我在运用KMP时&#xff0c;总时会搞混如果数组下标为0时要如何用写&#xff0c;下标为1时要如何写。 当下标为0时kmp void kmp(int len) {//下标为0 时vector<int> f(n,-1);for(int i 1;i < len;i){ // 每次更新的是 下标i // 当第 i1不匹配是 跳到 f[i]的位置上&…

106.进程控制(结束、孤儿、僵尸进程)以及进程回收

目录 结束进程 孤儿进程 僵尸进程 进程回收 wait() waitpid 进程控制是指在操作系统中对进程进行创建、终止、挂起、唤醒以及进程之间的同步、通信等操作的管理。 结束进程 exit() 和 _exit() 函数都用于终止一个进程&#xff0c;但它们之间有一些重要的区别&#xf…

新工科:数据科学与大数据技术实验中心解决方案,赋能高校新工科数智人才培养

随着数字经济蓬勃发展&#xff0c;数字化产业和产业数字化成为就业增长新动能。据人瑞人才与德勤调研显示&#xff0c;未来3年&#xff0c;数字产业化企业最需要运营人员和开发人员&#xff08;包括大数据开发工程师、数据建模开发工程师等&#xff09;&#xff0c;其次是数据分…

【RTOS学习】FreeRTOS中的链表 | 堆的管理

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f969;FreeRTOS中的链表&#x1f95e;初始化&#x1f95e;尾部插入&#x1f95e;按顺…

OpenWRT搭建本地web站点并结合内网穿透实现公网远程访问

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…

【Windows】MCSM面板搭建Mycraft服务器,实现公网远程联机

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 前言 MCSManager是一个…

[香橙派]Orange pi zero 3命令行配网方法——建立ssh连接——Ubuntu配置WIFI自动连接

一、前言 前面我们给Orange Pi安装了Ubuntu系统&#xff0c;并通过MobaXterm进行了串口连接&#xff0c;但其实并不方便&#xff0c;在日常开发中&#xff0c;我们希望能够使用更方便的ssh连接来进行操作&#xff0c;因此配置网络是必要的。 本章介绍的方法无需网线、HDMI线等&…

upload-labs

01 随便上传个文件 发现对于上传类型有限制 查看页面代码发现是js的过滤直接关闭js 上传成功 右键图片在新建标签页打开文件 这里直接抓包改名字也行 02 抓包修改后缀名 03 发现后端做了检测抓包修改失败 大小写绕过失败&#xff0c;php特性php1等会被当成php执行 这里图片的…

私域流量:探索营销新纪元的高效之路

在当前的数字营销领域&#xff0c;私域流量已经崭露头角&#xff0c;成为企业和品牌争相追逐的新路径。私域流量指的是企业或品牌通过自有渠道&#xff0c;如网站、APP、微信公众号等&#xff0c;直接触达的用户流量。这种流量具有更高的自主性和可控性&#xff0c;对于提升营销…

MS1242,替代ADS1242,24bit 高精度、低功耗模数转换器

产品简述 MS1242/MS1243 是一款高精度、宽动态范围、 ∆-Σ 模数转 换芯片&#xff0c;其工作电压为 2.7V 至 5.25V &#xff0c;可以达到 24bit 无失码转 换&#xff0c;有效精度可达 21bit 。 MS1242/MS1243 可以广泛使用在工 业控制、称重、液体 / 气体化学分析、血液分…

spark 写入 hudi时数据类型报错

报错信息如下&#xff1a; Caused by: org.apache.spark.sql.execution.QueryExecutionException: Parquet column cannot be converted in file hdfs://master:9000/user/hive/warehouse/ods_ds_hudi.db/order_info/19971201/77687054-08d3-4045-9529-1ca38e7de10b-0_0-65-57…

selenium相关地址汇总

webdriver下载 Chrome浏览器驱动下载地址&#xff1a;https://chromedriver.storage.googleapis.com/index.html Edge浏览器驱动下载地址&#xff1a;https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver) 或 https://msedgewebdriverstorage.z22.web.cor…

手眼标定 - 最终精度和误差优化心得

手眼标定 - 标定误差优化项 一、TCP标定误差优化1、注意标定针摆放范围2、TCP标定时的点次态与工作姿态尽可能保持相近 二、深度相机对齐矩阵误差1、手动计算对齐矩阵 三、手眼标定拍照姿态1、TCP标定姿态优先2、水平放置棋盘格优先 为减少最终手眼标定的误差&#xff0c;可做或…

Get职场新知识:做分析,用大数据分析工具

为什么企业每天累积那么多的数据&#xff0c;也做数据分析&#xff0c;但最后决策还是靠经验&#xff1f;很大程度上是因为这些数据都被以不同的指标和存储方式放在各自的系统中&#xff0c;这就导致了数据的分析口径和标准不一致&#xff0c;无法在同一个分析软件上做综合分析…

Rsync+Sersync

服务器相关参数 源服务器 192.168.17.101 目标服务器&#xff08;同步到的服务器&#xff09; 192.168.17.103 ##目标服务器配置 ###1、配置rsync服务 1、安装rsync yum -y install rsync 2、配置rsync vim /etc/rsyncd.conf 配置文件内容 uid root gid root use c…

Module build failed : Error : Vue packages version mismatch:

Vue packages version mismatch: - vue2.7.15 (E:\Workspace_ce\erp\erp-web\node_modules\vue\dist\vue.runtime.common.js) - vue-template-compiler2.6.11 (E:\Workspace_ce\erp\erp-web\node_modules\vue-template-compiler\package.json) 【问题解决了&#xff0c;我很不…

bootstrap:选项卡功能DEMO

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>选项卡</title> <link rel"stylesheet" type"text/css" href"/cdn.bootcss.com/bootstrap/3.3.2/css/bootstrap.min.css" />…

记一次测试环境git翻车经历

本来想拉一个功能分支进行新的功能开发&#xff0c;合并代码发现没有冲突居然有文件被修改了&#xff0c;贸然选择最近的一次回滚提交&#xff0c;没想到不假思索的push -f 导致一部分dev主干的代码不见了。 事故记录 开发分支origin/dev&#xff0c;功能分支file 合并之后发…

Java 实现 文档 添加 水印 工具类

一、pom 文件引用 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>…

MeterSphere实战(一)

MeterSphere是一位朋友讲到的测试平台&#xff0c;说这东西是开源的&#xff0c;因为我是做测试的&#xff0c;很乐意了解一些新鲜事物。在我看来&#xff0c;测试就是要专注一些领域&#xff0c;然后要啥都会一点点&#xff0c;接着融会贯通起来&#xff0c;这样就可以万变不离…