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

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

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

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

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...