当前位置: 首页 > 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 匈牙利匹…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...