Java操作Xml

一、数据准备

1、文件头实体类

package com.xiaobai.xmlpractice;import lombok.AllArgsConstructor;
import lombok.Data;/*** @Author 王天文* @Date 2024/12/18 21:46* @Description: xml头*/
@AllArgsConstructor
@Data
public class Head {private String desc;private String name;private String id;
}

2、人员信息实体类

package com.xiaobai.xmlpractice;import lombok.AllArgsConstructor;
import lombok.Data;/*** @Author 王天文* @Date 2024/12/18 20:41* @Description:*/
@AllArgsConstructor
@Data
public class Person {private Integer id;private String name;private Integer age;private String sex;private String account;private String profession;
}

二、使用org.w3c.dom操作xml

1、创建xml

(1)创建document对象

    /*** 创建document对象* @return* @throws Exception*/public Document createDoc() throws Exception {// 创建一个新的Document对象DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.newDocument();return doc;}

(2)添加子节点

    /*** 添加子节点* @param doc document对象* @param parentElement 上级节点* @param tagName 标签名称* @param value 标签值*/public void addElement(Document doc, Element parentElement, String tagName, String value) {Element element = doc.createElement(tagName);element.appendChild(doc.createTextNode(value));parentElement.appendChild(element);}

(3)根据数据生成xml字符串

    public String createXmlStr() throws Exception {// 创建一个新的Document对象Document doc = createDoc();// 根结点Element root = doc.createElement("root");doc.appendChild(root);// 数据头Element headElement = doc.createElement("head");headElement.appendChild(doc.createTextNode("人员信息"));root.appendChild(headElement);// 数据结点Element bodyElement = doc.createElement("body");root.appendChild(bodyElement);addData(doc, bodyElement);// 设置Transformer并指定XML声明头部TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.setOutputProperty(OutputKeys.VERSION, "1.0");transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");// 生成XML字符串DOMSource source = new DOMSource(doc);StringWriter writer = new StringWriter();StreamResult stringResult = new StreamResult(writer);transformer.transform(source, stringResult);// xml字符串String xmlContent = writer.toString();return xmlContent;}// 添加数据public void addData(Document doc, Element parentElement) {Person person = new Person(1, "张三", 29, "男", "zhangsan", "程序员");addElement(doc, parentElement, "id", String.valueOf(person.getId()));addElement(doc, parentElement, "name", person.getName());addElement(doc, parentElement, "age", String.valueOf(person.getAge()));addElement(doc, parentElement, "account", person.getAccount());addElement(doc, parentElement, "profession", person.getProfession());}

(4)测试

    @Testpublic void testCreate() throws Exception {String xmlStr = createXmlStr();log.info(xmlStr);}

输出:

16:39:24.426 [main] INFO com.xiaobai.xmlpractice.W3CDocTest - <?xml version="1.0" encoding="ISO-8859-1"?><root><head>&#20154;&#21592;&#20449;&#24687;</head><body><id>1</id><name>&#24352;&#19977;</name><age>29</age><account>zhangsan</account><profession>&#31243;&#24207;&#21592;</profession></body></root>

2、解析xml字符串

    @Testpublic void testParseXml() throws Exception {String xmlContent = createXmlStr();// 解析xml字符串DocumentBuilderFactory analyzeBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder analyzeBuilder = analyzeBuilderFactory.newDocumentBuilder();// 字符串转换成document对象Document document = analyzeBuilder.parse(new InputSource(new StringReader(xmlContent)));NodeList idNodeList = document.getElementsByTagName("name");String nodeValue = idNodeList.item(0).getChildNodes().item(0).getNodeValue();log.info(nodeValue);}

输出:

16:41:06.619 [main] INFO com.xiaobai.xmlpractice.W3CDocTest - 张三

三、使用dom4j操作xml

1、添加依赖

		<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.1</version></dependency>

2、创建xml

(1)示例代码

    public String createXmlStr() {Document document = DocumentHelper.createDocument();// 根节点Element rootElement = document.addElement("root");/*添加数据头*/// head节点Element headElement = rootElement.addElement("head");Head head = new Head("请求报文头", "技术有限公司", "1");// 添加desc子节点headElement.addElement("desc").addText(head.getDesc());// 添加name子节点headElement.addElement("name").addText(head.getName());// 添加id子节点headElement.addElement("id").addText(head.getId());// 创建data节点Element bodyElement = rootElement.addElement("data");// 添加数据信息Element infoElement = bodyElement.addElement("info");infoElement.addElement("id").addText("00001");infoElement.addElement("name").addText("张三");infoElement.addElement("age").addText("29");// 设置xml编码document.setXMLEncoding("ISO-8859-1");return document.asXML();}

(2)测试方法

    @Testpublic void createTest() {String xmlStr = createXmlStr();log.info(xmlStr);}

输出:

16:42:53.724 [main] INFO com.xiaobai.xmlpractice.Dom4jTest - <?xml version="1.0" encoding="ISO-8859-1"?>
<root><head><desc>请求报文头</desc><name>技术有限公司</name><id>1</id></head><data><info><id>00001</id><name>张三</name><age>29</age></info></data></root>

 3、解析xml

    @Testpublic void parseTest() throws Exception {String xmlStr = createXmlStr();Document document = DocumentHelper.parseText(xmlStr);// 获取根节点Element rootElement = document.getRootElement();// 获取data节点List<Element> dataElements = rootElement.elements("data");Element dataElement = dataElements.get(0);// 获取info节点List<Element> infoElements = dataElement.elements("info");Element infoElement = infoElements.get(0);// 获取name节点Element nameElement = infoElement.element("name");log.info(nameElement.getText());}

输出:

16:45:19.682 [main] INFO com.xiaobai.xmlpractice.Dom4jTest - 张三

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

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

相关文章

MyBatis如何处理延迟加载?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis如何处理延迟加载&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis如何处理延迟加载&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 支持 延迟加载&#xff08;Lazy Loading&am…

Matlab环形柱状图

数据准备&#xff1a; 名称 数值 Aa 21 Bb 23 Cc 35 Dd 47 保存为Excel文件后&#xff1a; % Load data from Excel file filename data.xlsx; % Ensure the file is in the current folder or provide full path dataTable readtable(filena…

论文研读:AnimateDiff—通过微调SD,用图片生成动画

1.概述 AnimateDiff 设计了3个模块来微调通用的文生图Stable Diffusion预训练模型, 以较低的消耗实现图片到动画生成。 论文名&#xff1a;AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning 三大模块&#xff1a; 视频域适应…

洛谷 P1014:Cantor 表

【题目来源】https://www.luogu.com.cn/problem/P1014https://www.acwing.com/problem/content/5510/【题目描述】 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。 他是用下面这一张表来证明这一命题的&#xff1a; 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 …

【网络安全零基础入门】PHP环境搭建、安装Apache、安装与配置MySQL(非常详细)零基础入门到精通,收藏这一篇就够(01)_php安装配置教程

这是大白给粉丝朋友准备的网络安全零基础入门第八章PHP入门的知识章节里的环境搭建。 喜欢的朋友们&#xff0c;记得给大白点赞支持和收藏一下&#xff0c;关注我&#xff0c;学习黑客技术。 一、php简介 php定义&#xff1a;一种服务器端的 HTML脚本/编程语言&#xff0c;是…

RBTree(红黑树)

目录 红黑树的概念 红黑树的性质 红黑树节点的定义 红黑树的插入 1. 按照二叉搜索的树规则插入新节点 2. 检测新节点插入后&#xff0c;红黑树的性质是否造到破坏 红黑树的检测 红黑树的删除 红黑树和AVL树的比较 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&…

JS 三种添加元素的方式、区别( write、createElement、innerHTML )

文章目录 1. 区别结论2. write 不同场合的效果3. createElement 和 innerHTML 耗时对比 1. 区别结论 方式说明document.write不建议使用, 使用时要小心, 不同场合, 效果不同document.createElement添加少量元素时建议使用, 结构清晰易读innerHTML添加大量元素时建议使用 2. wr…

300多种复古手工裁剪拼贴艺术时尚字母、数字、符号海报封面Vlog视频MOV+PNG素材

300复古时尚大小写字母、数字、符号拼贴海报封面平面设计Vlog视频标题动画 Overlay - Cut-Out Letters Animations Pack - Animated Letters, Numbers, and Symbols 使用 Cut-Out Letters Animations Pack 提升您的内容&#xff01;包含 300多个高品质动画资源&#xff0c;包括…

SpringCloudAlibaba技术栈-Dubbo

1、什么是Dubbo? 简单来说&#xff0c;dubbo就像是个看不见的手&#xff0c;负责专门从注册中心nacos调用注册到nacos上面的服务的&#xff0c;因为在微服务环境下不同的功能模块可能在不同的服务器上。dubbo调用服务就像是在调用本地的服务一样。 分布式调用与高并发处理 Du…

剪映学习01

1.剪映界面介绍 1.点击左上角的的登录账户可以登录剪映&#xff0c;它可以和抖音账号共用&#xff0c;所以我们剪辑完视频后可以直接从抖音发布。 左侧的导航栏有一些功能&#xff0c;我们点击模板&#xff0c;剪映它会显示当下比较火的模板&#xff0c;如果我们剪视频需要用到…

OpenLinkSaas使用手册-简介

OpenLinkSaas是针对软件研发人员/团队的效能工具。对个人而言是工具加成长导航路线&#xff0c;对团队而言是团队管理和项目管理。 OpenLinkSaas虽然功能众多&#xff0c;但可以按需配置所需功能&#xff0c;也可以制作自己的发行版。 OpenLinkSaas的由来 软件研发是一个比较…

QT调用Sqlite数据库

QT设计UI界面&#xff0c;后台访问数据库&#xff0c;实现数据库数据的增删改查。 零售商店系统 数据库表&#xff1a; 分别是顾客表&#xff0c;订单详情表&#xff0c;订单表&#xff0c;商品表 表内字段详情如下&#xff1a; 在QT的Pro文件中添加sql&#xff0c;然后添加头…

vue3使用vant日历组件(calendar),自定义日历下标的两种方法

在vue3中使用vant日历组件&#xff08;calendar&#xff09;自定义下标的两种方法&#xff0c;推荐使用第二种&#xff1a; 日期下方加小圆点&#xff1a; 一、使用伪元素样式实现(::after伪元素小圆点样式会被覆盖&#xff0c;只能添加一个小圆点) 代码如下&#xff08;示例…

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器 1、按键控制 LED 按键:常见的输入设备&#xff0c;按下导通&#xff0c;松手断开 按键抖动:由子按键内部使用的是机械式弹簧片来进行通断的、所以在按下和松手的瞬间会伴随有一连串的抖动 按键控制LED接线图&#xff1a; 要有工程…

2024金融大模型实践方案的概览(附实践资料合集)

金融大模型实践方案的全面总结&#xff1a; 金融大模型应用评测&#xff1a; 在金融评测的五大能力维度中&#xff0c;各模型整体表现基本满足当下场景需求&#xff0c;其中金融安全与价值对齐表现优异&#xff0c;但金融专业认知和多模态处理能力仍存在较大提升空间。 金融大模…

设计模式之享元模式:看19路棋盘如何做到一子千面

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 一、享元模式概述 \quad 在软件设计中&#xff0c;享元模式(Flyweight Pattern)的核心思想是通过共享来有效地支持大量细粒度对象的重用。这里的…

英语单词拼读小程序开发制作介绍

英语单词拼读小程序开发制作介绍本英语单词拼读小程序系统开发的主要功能有&#xff1a; 1、按年级分类展示每个年级阶段的英语单词信息。 2、点击选择的单词进入单词拼读页面&#xff0c;展示英语单词的拼读音标、中文意思、单词发音、拆分词汇发音、用户通过朗读发音对比。通…

华为管理变革之道:管理制度创新

目录 华为崛起两大因素&#xff1a;管理制度创新和组织文化。 管理是科学&#xff0c;150年来管理史上最伟大的创新是流程 为什么要变革&#xff1f; 向世界标杆学习&#xff0c;是变革第一方法论 体系之一&#xff1a;华为的DSTE战略管理体系&#xff08;解决&#xff1a…

基于Spring Boot的中国戏曲文化传播系统

一、系统背景与意义 中国戏曲作为中华民族的文化瑰宝&#xff0c;具有深厚的历史底蕴和艺术价值。然而&#xff0c;随着现代生活节奏的加快和娱乐方式的多样化&#xff0c;传统戏曲文化的传播和普及面临诸多挑战。因此&#xff0c;开发一个基于Spring Boot的中国戏曲文化传播系…

GitLab安装及使用

目录 一、安装 1.创建一个目录用来放rpm包 2.检查防火墙状态 3.安装下载好的rpm包 4.修改配置文件 5.重新加载配置 6.查看版本 7.查看服务器状态 8.重启服务器 9.输网址 二、GitLab的使用 1.创建空白项目 2.配置ssh 首先生成公钥&#xff1a; 查看公钥 把上面的…