xml详解
一、XML是什么
XML(可扩展标记语言)是一种非常常用的数据存储和交换格式。
二、XML 的基本结构
- 声明
-
- XML 文件通常以 XML 声明开始,例如:
<?xml version="1.0" encoding="UTF-8"?>。它指定了 XML 的版本和编码方式。
- XML 文件通常以 XML 声明开始,例如:
- 元素
-
- XML 由元素组成。一个元素通常由开始标签、内容和结束标签组成。例如:
<book><title>XML 入门</title><author>某人</author></book>。 - 元素可以嵌套,形成层次结构。
- XML 由元素组成。一个元素通常由开始标签、内容和结束标签组成。例如:
- 属性
-
- 元素可以有属性,属性在开始标签中指定。例如:
<book id="123"><title>XML 进阶</title><author>另一人</author></book>,这里的 “id” 就是属性。
- 元素可以有属性,属性在开始标签中指定。例如:
三、XML 的语法规则
- 标签必须正确嵌套,不能交叉嵌套。
- 标签必须成对出现,有开始标签就必须有结束标签。
- 属性值必须用引号括起来,可以是单引号或双引号。
- XML 是区分大小写的。
四、XML 的用途
- 数据存储
-
- 可以将数据以结构化的方式存储在 XML 文件中。例如,存储书籍信息、用户配置等。
- 数据交换
-
- 不同的系统可以使用 XML 作为数据交换的格式,因为它是平台无关的。
- 配置文件
-
- 许多软件使用 XML 作为配置文件,如服务器配置、应用程序设置等。
五、在 Java 中处理 XML
- DOM(文档对象模型)
-
- DOM 将 XML 文档表示为一个树结构,可以通过编程方式遍历和修改这个树。
- 使用步骤:
-
-
- 创建一个
DocumentBuilderFactory。 - 使用工厂创建一个
DocumentBuilder。 - 使用
DocumentBuilder解析 XML 文件,得到一个Document对象。 - 通过
Document对象访问和操作 XML 元素和属性。
- 创建一个
-
- SAX(简单 API for XML)
-
- SAX 是一种基于事件的解析方式,在解析 XML 时,当遇到特定的元素、属性等时会触发相应的事件。
- 使用步骤:
-
-
- 创建一个
SAXParserFactory。 - 使用工厂创建一个
SAXParser。 - 创建一个自定义的
DefaultHandler类来处理 SAX 事件。 - 使用
SAXParser解析 XML 文件,并将自定义的DefaultHandler作为参数传递。
- 创建一个
-
- JAXB(Java Architecture for XML Binding)
-
- JAXB 允许将 Java 对象与 XML 文档相互转换。
- 使用步骤:
-
-
- 创建 Java 类,并使用 JAXB 注解来指定与 XML 的映射关系。
- 使用
JAXBContext来进行 Java 对象和 XML 之间的转换操作。
-
六、XML 的优点和缺点
- 优点:
-
- 结构化和自描述性,易于理解和阅读。
- 平台无关性,可以在不同的操作系统和编程语言中使用。
- 广泛的工具支持,有许多库和工具可用于处理 XML。
- 缺点:
-
- 相对较冗长,文件体积可能较大。
- 解析相对复杂和耗时,特别是对于大型 XML 文件。
七、xml和json之间的转换
注意需要添加依赖
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.14.2</version></dependency>
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.json.JSONException;
import org.json.XML;import java.util.Map;public class XmlJsonConverter {// JSON 转 XMLpublic static String jsonToXml(String jsonStr) {try {JSONObject jsonObject = JSONObject.parseObject(jsonStr);Map<String, Object> map = jsonObject.toJavaObject(new TypeReference<Map<String, Object>>() {});return XML.toString(map);} catch (JSONException e) {e.printStackTrace();return null;}}// XML 转 JSONpublic static String xmlToJson(String xmlStr) {try {XmlMapper xmlMapper = new XmlMapper();JsonNode jsonNode = xmlMapper.readTree(xmlStr);ObjectMapper objectMapper = new ObjectMapper();return objectMapper.writeValueAsString(jsonNode);} catch (Exception e) {e.printStackTrace();return null;}}
}
调用小工具
public class Main {public static void main(String[] args) {String json = "{\"name\":\"John\",\"age\":30,\"address\":{\"city\":\"New York\",\"street\":\"Main Street\"}}";String xml = XmlJsonConverter.jsonToXml(json);if (xml!= null) {System.out.println("JSON to XML:");System.out.println(xml);}String xmlStr = "<person><name>Jane</name><age>28</age><address><city>London</city><street>Oxford Street</street></address></person>";String jsonFromXml = XmlJsonConverter.xmlToJson(xmlStr);if (jsonFromXml!= null) {System.out.println("XML to JSON:");System.out.println(jsonFromXml);}}
}
八、xml和对象之间的转换
将 Java 对象转换为 XML 字符串以及将 XML 字符串转换回 Java 对象的方法。
注意,要转换的 Java 对象类需要使用 JAXB 注解进行适当的标注,如@XmlRootElement等。
同时,确保在项目中添加 JAXB 相关的依赖。
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;public class XmlObjectConverter {// 对象转 XMLpublic static String objectToXml(Object obj) {try {JAXBContext context = JAXBContext.newInstance(obj.getClass());Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);StringWriter writer = new StringWriter();marshaller.marshal(obj, writer);return writer.toString();} catch (JAXBException e) {e.printStackTrace();return null;}}// XML 转对象public static <T> T xmlToObject(String xml, Class<T> clazz) {try {JAXBContext context = JAXBContext.newInstance(clazz);Unmarshaller unmarshaller = context.createUnmarshaller();StringReader reader = new StringReader(xml);return (T) unmarshaller.unmarshal(reader);} catch (JAXBException e) {e.printStackTrace();return null;}}
}
新建一个java对象
import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement
class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
使用工具
public class Main {public static void main(String[] args) {Person person = new Person("Alice", 25);String xml = XmlObjectConverter.objectToXml(person);if (xml!= null) {System.out.println("Object to XML:");System.out.println(xml);}String xmlStr = "<person><name>Bob</name><age>30</age></person>";Person personFromXml = XmlObjectConverter.xmlToObject(xmlStr, Person.class);if (personFromXml!= null) {System.out.println("XML to Object:");System.out.println("Name: " + personFromXml.getName() + ", Age: " + personFromXml.getAge());}}
}相关文章:
xml详解
一、XML是什么 XML(可扩展标记语言)是一种非常常用的数据存储和交换格式。 二、XML 的基本结构 声明 XML 文件通常以 XML 声明开始,例如:<?xml version"1.0" encoding"UTF-8"?>。它指定了 XML 的版…...
C140 杨辉三角
C140 杨辉三角 题目题解(94)讨论(102)排行面经 new 简单 通过率:29.57% 时间限制:1秒 空间限制:256M 知识点C工程师牛客 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,…...
C++字符串操作中的陷阱
休对故人思故国,且将新火试新茶。诗酒趁年华。 ——《望江南超然台作》【宋】苏轼 目录 正文: 首先我们要明白出现问题的原因: 1. 缓冲区溢出 2. 错误的字符串声明方式 3. 缺乏对NULL指针的检查 解决方案: 下期预告:C字符串…...
最值求解 | 管理类联考数学专项
日期内容2024.9.5新建2024.9.6曦曦求最值完结 实数求最值至少至多抽屉原理工程问题线性规划一次性绝对值求最值 参考: b站跟着曦曦老师玩转【最值】...
C++_继承详解
继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承呈现了面向对象程序设计的层次结构,之前我们接触的复用都是函数复用,今天我们所讨…...
区块链开发解决方案有哪些
区块链开发解决方案概述 区块链开发解决方案旨在利用区块链技术构建和开发新型应用和系统,以解决各种业务问题和提升效率。区块链作为一种基于密码学的分布式账本技术,通过将交易和数据记录在不可篡改的区块中,并通过网络中的多个节点共同验…...
Express与SQLite集成教程:轻松实现数据库操作
Express使用SQLite的教程可以大致分为以下几个步骤。以下是一个详细的指南,帮助你在Express项目中集成SQLite数据库。 1. 安装必要的库 首先,你需要在你的Express项目中安装sqlite3库。打开终端或命令提示符,切换到你的项目目录,…...
Transforms的常见用法
文章目录 一、封装函数与普通函数的用法区别二、Image.open()打开图片的格式三、ToTensor打开图片格式四、ToTensor使用五、Normalize归一化使用六、Resize的使用七、Compose - Resize 使用八、RandomCrop() 随机裁剪用法 一、封装函数与普通函数的用法区…...
js 创建 React 项目
起因(目的): js 很久没写了。 react js 之前粗略看过, 最近又需要用到, 继续学习, 记录 积累。 1. 新建 React 项目 的几种方法。 官方建议使用 next 来创建 React 项目, 但是我觉得太复杂了。以后再看看. npx create-next-applatest # !!! 不建议使…...
WPF 中常用 `Transform` 类的介绍、使用示例和适用场景
WPF 中常用 Transform 类的介绍、使用示例和适用场景 使用场景解释代码示例示例代码解释 Transform 类描述使用示例适用场景TranslateTransform用于沿 X 轴或 Y 轴平移(移动)元素。xml <TranslateTransform X"50" Y"100" />移…...
ElasticSearch-DSL
查询所有 match_all 分页查询 from size深分页查询 Scroll指定字段排序 sort返回指定字段_sourcematch 短语查询 match_phrase多字段查询 multi_matchquery_string simple_query_string 关键词查询 Term 结构化搜索 前缀查询 prefix通配符查询 wildcard范围查询 range多 id 查…...
Learn ComputeShader 07 Post Processing
这次我们将使用计算机着色器对图像进行后处理。 要进行后处理需要将渲染图像从cpu传递给gpu,并在gpu对图像进行处理然后传回cpu。 首先创建一个后处理基类BasePP 首先声明需要用到的属性。 using System.Collections; using System.Collections.Generic; using …...
初始QT!
作业:了解QT文件夹初始代码的意义 QT core gui #QT工程所需得类库 core是核心库 gui图形化界面相关库类 greaterThan(QT_MAJOR_VERSION, 4): QT widgets #版本超过4.0会加上widgetsCONFIG c11 #该编辑器支持c11后的版本 # The following define makes you…...
全国大学生数据建模比赛——深度学习
全国大学生数学建模比赛中,深度学习可以成为解决复杂问题的有力手段。 一、深度学习的优势在比赛中的体现 强大的模式识别能力:深度学习模型,如卷积神经网络(CNN)和循环神经网络(RNN)࿰…...
Qt技巧(二)-滑动界面,轮询控件,循环操作控件
在Qt界面开发过程中,我们常常要对同类部件,具有同样功能的一系列部件进行操作,比如: 这个页面该怎么设计,中间的几个选项该怎么操作? 我们在主工程中添加一个设计师界面类,类名设置为“BrandF…...
003——单链表
1.链式存储的特点 逻辑(通过指针实现)上相邻,物理上可相邻可不相邻 2.结点(节点都可以) 4(&8) 8(&6) 6(&1) 1(&…...
XILINX平台下LINUX DMA驱动调研
专栏目录 高质量文章导航-持续更新中-CSDN博客 基础概念 VA:virtual address称为虚拟地址, PA:physical address称为物理地址。 CPU通过地址来访问内存中的单元,如果CPU没有MMU,或者有MMU但没有启动,那么CPU内核在取指令或者访问内存时发出的地址(此时必须是物理地址…...
Oracle数据库安装和配置指南
Oracle数据库是一款功能强大的企业级关系数据库管理系统(RDBMS),广泛应用于各种规模的企业和组织。其强大的性能和丰富的功能使其成为数据库管理的首选解决方案之一。以下是关于如何安装和配置 Oracle 数据库的详细指南。 一、准备工作 在开…...
制造业中工艺路线(工序)与产线(工作中心)关系
一.工艺路线与生产线是数字孪生中的虚实关系: 1.工艺路线为虚,生产线体为实; 2.工艺路线指导生产线的生产组织,生产线承载工艺路线的能力,把虚拟的生产信息流变成真实的产流。 二.工艺路线与生产线是数字孪生中互为“…...
目标跟踪算法——ByteTrack算法原理解析
文章目录 ByteTrack1. ByteTrack算法步骤:2. 算法解释2.1 模型初始化2.2 模型更新算法流程2.2.1 检测结果划分,划分为高分和较低分段2.2.2 高分段处理手段2.2.3 最优匹配与未匹配划分2.2.4 低分框再匹配2.2.5 未确认轨迹处理2.2.6 更新状态 2.3 匈牙利匹…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
