Java操作Xml

devtools/2024/12/26 12:40:01/

一、数据准备

1、文件头实体类

java">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、人员信息实体类

java">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对象

java">    /*** 创建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)添加子节点

java">    /*** 添加子节点* @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字符串

java">    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)测试

java">    @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字符串

java">    @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)示例代码

java">    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)测试方法

java">    @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

java">    @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.ppmy.cn/devtools/145528.html

相关文章

whisper.cpp: Android端测试 -- Android端手机部署音频大模型

whisper.cpp: Android端测试 1.环境需要2.构建项目3.Android测试 1.环境需要 以下是经实验验证可行的环境参考&#xff0c;也可尝试其他版本。 &#xff08;1&#xff09;PC&#xff1a;Ubuntu 22.04.4 &#xff08;2&#xff09;硬件设备&#xff1a;Android 手机 &#x…

肿瘤电场治疗费用

肿瘤电场治疗作为一种前沿的肿瘤治疗方法&#xff0c;近年来备受关注。该方法通过利用特定频率的交流电场&#xff0c;作用于恶性肿瘤细胞&#xff0c;以达到抑制肿瘤生长的目的。然而&#xff0c;随着这种治疗方法的普及&#xff0c;其费用问题也逐渐成为患者和家属关注的焦点…

低代码开发中 DDD 领域驱动的页面权限控制

在低代码开发的领域中&#xff0c;应用安全与灵活性是两大关键考量因素。领域驱动设计&#xff08;DDD&#xff09;作为一种在软件设计领域广泛应用且颇具影响力的方法论&#xff0c;正逐渐在低代码开发的页面权限控制方面展现出其独特的价值与潜力。本文旨在客观地探讨如何借助…

选择排序:简单算法的实现与优化探索

目录 一、选择排序的基本步骤 二、时间复杂度 三、优缺点 四、Java 实现选择排序 总结 选择排序是一种简单直观的排序算法。它的基本思想是每次从未排序的部分中选择最小&#xff08;或最大&#xff09;元素&#xff0c;将其放到已排序部分的末尾。尽管选择排序的时间复杂…

2.利用docker进行gitlab服务器迁移

一、Docker安装 安装Ubuntu 22.04.3 LTS \n \l 1、旧版本安装包清理 sudo apt-get remove docker docker-engine docker.io containerd runc当你卸载Docker时&#xff0c;存储在/var/lib/docker/中的图像、容器、卷和网络不会自动删除。如果你想从一个干净的安装开始&#x…

Leecode刷题C语言之切蛋糕的最小总开销①

执行结果:通过 执行用时和内存消耗如下&#xff1a; int idx(int m, int n, int row1, int col1, int row2, int col2) {return (row1 * n col1) * m * n row2 * n col2; }int dp(int m, int n, int row1, int col1, int row2, int col2, int *horizontalCut, int *vertica…

JVM系列(十二) -常用调优命令汇总

最近对 JVM 技术知识进行了重新整理&#xff0c;再次献上 JVM系列文章合集索引&#xff0c;感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…

如何进行POC概念验证

进行 POC&#xff08;Proof of Concept&#xff0c;概念验证&#xff09; 的目的是验证某个想法、技术或方案的可行性。以下是进行 POC 的详细步骤&#xff1a; 1. 明确目标和范围 定义问题&#xff1a;明确你要解决的核心问题或验证的关键点。 设定目标&#xff1a;确定 POC …