当前位置: 首页 > news >正文

xml详解

一、XML是什么

XML(可扩展标记语言)是一种非常常用的数据存储和交换格式。

二、XML 的基本结构

  1. 声明
    • XML 文件通常以 XML 声明开始,例如:<?xml version="1.0" encoding="UTF-8"?>。它指定了 XML 的版本和编码方式。
  1. 元素
    • XML 由元素组成。一个元素通常由开始标签、内容和结束标签组成。例如:<book><title>XML 入门</title><author>某人</author></book>
    • 元素可以嵌套,形成层次结构。
  1. 属性
    • 元素可以有属性,属性在开始标签中指定。例如:<book id="123"><title>XML 进阶</title><author>另一人</author></book>,这里的 “id” 就是属性。

三、XML 的语法规则

  1. 标签必须正确嵌套,不能交叉嵌套。
  2. 标签必须成对出现,有开始标签就必须有结束标签。
  3. 属性值必须用引号括起来,可以是单引号或双引号。
  4. XML 是区分大小写的。

四、XML 的用途

  1. 数据存储
    • 可以将数据以结构化的方式存储在 XML 文件中。例如,存储书籍信息、用户配置等。
  1. 数据交换
    • 不同的系统可以使用 XML 作为数据交换的格式,因为它是平台无关的。
  1. 配置文件
    • 许多软件使用 XML 作为配置文件,如服务器配置、应用程序设置等。

五、在 Java 中处理 XML

  1. DOM(文档对象模型)
    • DOM 将 XML 文档表示为一个树结构,可以通过编程方式遍历和修改这个树。
    • 使用步骤:
      • 创建一个 DocumentBuilderFactory
      • 使用工厂创建一个 DocumentBuilder
      • 使用 DocumentBuilder 解析 XML 文件,得到一个 Document 对象。
      • 通过 Document 对象访问和操作 XML 元素和属性。
  1. SAX(简单 API for XML)
    • SAX 是一种基于事件的解析方式,在解析 XML 时,当遇到特定的元素、属性等时会触发相应的事件。
    • 使用步骤:
      • 创建一个 SAXParserFactory
      • 使用工厂创建一个 SAXParser
      • 创建一个自定义的 DefaultHandler 类来处理 SAX 事件。
      • 使用 SAXParser 解析 XML 文件,并将自定义的 DefaultHandler 作为参数传递。
  1. JAXB(Java Architecture for XML Binding)
    • JAXB 允许将 Java 对象与 XML 文档相互转换。
    • 使用步骤:
      • 创建 Java 类,并使用 JAXB 注解来指定与 XML 的映射关系。
      • 使用 JAXBContext 来进行 Java 对象和 XML 之间的转换操作。

六、XML 的优点和缺点

  1. 优点:
    • 结构化和自描述性,易于理解和阅读。
    • 平台无关性,可以在不同的操作系统和编程语言中使用。
    • 广泛的工具支持,有许多库和工具可用于处理 XML。
  1. 缺点:
    • 相对较冗长,文件体积可能较大。
    • 解析相对复杂和耗时,特别是对于大型 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&#xff08;可扩展标记语言&#xff09;是一种非常常用的数据存储和交换格式。 二、XML 的基本结构 声明 XML 文件通常以 XML 声明开始&#xff0c;例如&#xff1a;<?xml version"1.0" encoding"UTF-8"?>。它指定了 XML 的版…...

C140 杨辉三角

C140 杨辉三角 题目题解(94)讨论(102)排行面经 new 简单 通过率&#xff1a;29.57% 时间限制&#xff1a;1秒 空间限制&#xff1a;256M 知识点C工程师牛客 校招时部分企业笔试将禁止编程题跳出页面&#xff0c;为提前适应&#xff0c;练习时请使用在线自测&#xff0c;…...

C++字符串操作中的陷阱

休对故人思故国&#xff0c;且将新火试新茶。诗酒趁年华。 ——《望江南超然台作》【宋】苏轼 目录 正文&#xff1a; 首先我们要明白出现问题的原因: 1. 缓冲区溢出 2. 错误的字符串声明方式 3. 缺乏对NULL指针的检查 解决方案&#xff1a; 下期预告&#xff1a;C字符串…...

最值求解 | 管理类联考数学专项

日期内容2024.9.5新建2024.9.6曦曦求最值完结 实数求最值至少至多抽屉原理工程问题线性规划一次性绝对值求最值 参考&#xff1a; b站跟着曦曦老师玩转【最值】...

C++_继承详解

继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能。继承呈现了面向对象程序设计的层次结构&#xff0c;之前我们接触的复用都是函数复用&#xff0c;今天我们所讨…...

区块链开发解决方案有哪些

区块链开发解决方案概述 区块链开发解决方案旨在利用区块链技术构建和开发新型应用和系统&#xff0c;以解决各种业务问题和提升效率。区块链作为一种基于密码学的分布式账本技术&#xff0c;通过将交易和数据记录在不可篡改的区块中&#xff0c;并通过网络中的多个节点共同验…...

Express与SQLite集成教程:轻松实现数据库操作

Express使用SQLite的教程可以大致分为以下几个步骤。以下是一个详细的指南&#xff0c;帮助你在Express项目中集成SQLite数据库。 1. 安装必要的库 首先&#xff0c;你需要在你的Express项目中安装sqlite3库。打开终端或命令提示符&#xff0c;切换到你的项目目录&#xff0c…...

Transforms的常见用法

文章目录 一、封装函数与普通函数的用法区别二、Image.open()打开图片的格式三、ToTensor打开图片格式四、ToTensor使用五、Normalize归一化使用六、Resize的使用七、Compose - Resize 使用八、RandomCrop&#xff08;&#xff09; 随机裁剪用法 一、封装函数与普通函数的用法区…...

js 创建 React 项目

起因(目的): js 很久没写了。 react js 之前粗略看过, 最近又需要用到, 继续学习&#xff0c; 记录 积累。 1. 新建 React 项目 的几种方法。 官方建议使用 next 来创建 React 项目&#xff0c; 但是我觉得太复杂了。以后再看看. npx create-next-applatest # !!! 不建议使…...

WPF 中常用 `Transform` 类的介绍、使用示例和适用场景

WPF 中常用 Transform 类的介绍、使用示例和适用场景 使用场景解释代码示例示例代码解释 Transform 类描述使用示例适用场景TranslateTransform用于沿 X 轴或 Y 轴平移&#xff08;移动&#xff09;元素。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&#xff0c;并在gpu对图像进行处理然后传回cpu。 首先创建一个后处理基类BasePP 首先声明需要用到的属性。 using System.Collections; using System.Collections.Generic; using …...

初始QT!

作业&#xff1a;了解QT文件夹初始代码的意义 QT core gui #QT工程所需得类库 core是核心库 gui图形化界面相关库类 greaterThan(QT_MAJOR_VERSION, 4): QT widgets #版本超过4.0会加上widgetsCONFIG c11 #该编辑器支持c11后的版本 # The following define makes you…...

全国大学生数据建模比赛——深度学习

全国大学生数学建模比赛中&#xff0c;深度学习可以成为解决复杂问题的有力手段。 一、深度学习的优势在比赛中的体现 强大的模式识别能力&#xff1a;深度学习模型&#xff0c;如卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;&#xff0…...

Qt技巧(二)-滑动界面,轮询控件,循环操作控件

在Qt界面开发过程中&#xff0c;我们常常要对同类部件&#xff0c;具有同样功能的一系列部件进行操作&#xff0c;比如&#xff1a; 这个页面该怎么设计&#xff0c;中间的几个选项该怎么操作&#xff1f; 我们在主工程中添加一个设计师界面类&#xff0c;类名设置为“BrandF…...

003——单链表

1.链式存储的特点 逻辑&#xff08;通过指针实现&#xff09;上相邻&#xff0c;物理上可相邻可不相邻 2.结点&#xff08;节点都可以&#xff09; 4&#xff08;&8&#xff09; 8&#xff08;&6&#xff09; 6&#xff08;&1&#xff09; 1&#xff08;&…...

XILINX平台下LINUX DMA驱动调研

专栏目录 高质量文章导航-持续更新中-CSDN博客 基础概念 VA:virtual address称为虚拟地址, PA:physical address称为物理地址。 CPU通过地址来访问内存中的单元,如果CPU没有MMU,或者有MMU但没有启动,那么CPU内核在取指令或者访问内存时发出的地址(此时必须是物理地址…...

Oracle数据库安装和配置指南

Oracle数据库是一款功能强大的企业级关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛应用于各种规模的企业和组织。其强大的性能和丰富的功能使其成为数据库管理的首选解决方案之一。以下是关于如何安装和配置 Oracle 数据库的详细指南。 一、准备工作 在开…...

制造业中工艺路线(工序)与产线(工作中心)关系

一.工艺路线与生产线是数字孪生中的虚实关系&#xff1a; 1.工艺路线为虚&#xff0c;生产线体为实&#xff1b; 2.工艺路线指导生产线的生产组织&#xff0c;生产线承载工艺路线的能力&#xff0c;把虚拟的生产信息流变成真实的产流。 二.工艺路线与生产线是数字孪生中互为“…...

目标跟踪算法——ByteTrack算法原理解析

文章目录 ByteTrack1. ByteTrack算法步骤&#xff1a;2. 算法解释2.1 模型初始化2.2 模型更新算法流程2.2.1 检测结果划分&#xff0c;划分为高分和较低分段2.2.2 高分段处理手段2.2.3 最优匹配与未匹配划分2.2.4 低分框再匹配2.2.5 未确认轨迹处理2.2.6 更新状态 2.3 匈牙利匹…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...