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

语法篇--XML数据传输格式

一、XML概述

1.1简介

XML,全称为Extensible Markup Language,即可扩展标记语言,是一种用于存储和传输数据的文本格式。它是由W3C(万维网联盟)推荐的标准,广泛应用于各种系统中,如Web服务、数据库、移动应用等。与HTML相比,XML不是用于显示数据的,而是用于存储和传输数据,其语法结构更为严谨,可以支持自定义的标签和属性。

XML的语法规则很简单,由开始标签、结束标签、元素内容和属性组成。开始标签和结束标签使用尖括号括起来,元素内容位于开始标签和结束标签之间,属性则包含在开始标签中。XML文档的根元素是唯一的,所有其他元素都是其子元素。XML还可以使用DTD(文档类型定义)和XML Schema等方式定义文档的结构和内容约束。

由于XML的语法严谨、自定义标签和属性以及可扩展性等特点,使其成为一种流行的数据格式。它在Web服务中广泛应用,如SOAP协议、RESTful Web服务等,也用于配置文件、数据交换、文档传输等场景。

1.2用途

a.程序之间的数据传输通讯
PHP语言<- 快递100 <- Java 语言
b.配置文件config. xml
config. xm1 -> php语言、java语言、Python语言
c.存储数据,充当小型数据库
data. xml

由于XML具有通用性、可扩展性和可读性等特点,因此被广泛用于描述和存储各种类型的数据,如文本、图片、音频、视频、配置文件等。XML还被广泛应用于Web服务、企业应用集成、电子商务、电子出版、数据交换等领域。

1.3什么是XML

XML被发明的目的是传输和存储数据,而不是展示数据;
XML的标签必须自定义,但是在写标签名的时候一定要有含义;

1.4为什么需要XML

 1.5快速入门

1.6扩展技术

1.6.1DTD

1.6.2XSD 

1.6.3XSL

 二、XML的解析

2.1XML的解析方法

2.2Dom处理方法

其处理方式是将XML整个作为类似树结构的方式读入内存中以便操作及解析,方便修改。
解析大数据量的XML文件,会遇到内存泄露及程序崩溃的风险。 

2.3 DOM类解析

2.4DOM读xml文件

package org.example;import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;public class Main {public static void main(String[] a) {recursiveTraverse(); //自上而下进行访问System.out.println("========华丽丽的分割线=======");traverseBySearch(); //根据名称进行搜索}public static void recursiveTraverse() {try {DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse(new File("D:\\workspace-java\\untitled4\\users.xml"));NodeList usersList = document.getChildNodes();for (int i = 0; i < usersList.getLength(); i++) {Node users = usersList.item(i);NodeList userList = users.getChildNodes();for (int j = 0; j < userList.getLength(); j++) {Node user = userList.item(j);if (user.getNodeType() == Node.ELEMENT_NODE) {NodeList metaList = user.getChildNodes();for (int k = 0; k < metaList.getLength(); k++) {Node meta = metaList.item(k);if (meta.getNodeType() == Node.ELEMENT_NODE) {System.out.println(meta.getNodeName()+ ":" + meta.getTextContent());}}System.out.println();}}}} catch (Exception e) {e.printStackTrace();}}public static void traverseBySearch() {try {DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse(new File("D:\\workspace-java\\untitled4\\users.xml"));org.w3c.dom.Element rootElement = document.getDocumentElement();NodeList nodeList = rootElement.getElementsByTagName("name");if (nodeList != null) {for (int i = 0; i < nodeList.getLength(); i++) {org.w3c.dom.Element element = (org.w3c.dom.Element) nodeList.item(i);System.out.println(element.getNodeName() + " = " + element.getTextContent());}}} catch (Exception e) {e.printStackTrace();}}
}

 2.5DOM写xml文件

package org.example;import org.w3c.dom.Document;
import org.w3c.dom.Element;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;public class DomWriter {public static void main(String[] args) {try {DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();// 新创建一个Document节点Document document = dbBuilder.newDocument();if (document != null) {Element docx = document.createElement("document"); // 创建名为 "document" 的元素Element element = document.createElement("element");element.setAttribute("type", "paragraph");element.setAttribute("alignment", "left"); // 为 element 增加属性Element object = document.createElement("object");object.setAttribute("type", "text");Element text = document.createElement("text");text.appendChild(document.createTextNode("abcdefg")); // 为 text 节点赋值Element bold = document.createElement("bold");bold.appendChild(document.createTextNode("true")); // 为 bold 节点赋值object.appendChild(text); // 将 text 节点挂在 object 下object.appendChild(bold); // 将 bold 节点挂在 object 下element.appendChild(object); // 将 object 节点挂在 element 下docx.appendChild(element); // 将 element 节点挂在 docx 下document.appendChild(docx); // 将 docx 挂在 document 下TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();DOMSource source = new DOMSource(document);// 定义目标文件File file = new File("dom_result.xml");StreamResult result = new StreamResult(file);// 将 XML 内容写入文件中transformer.transform(source, result);System.out.println("Write XML file successfully");}} catch (Exception e) {e.printStackTrace();}}
}

2.6SAX处理方法

package org.example;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class SAXReader {public static void main(String[] args) {try {XMLReader parser = XMLReaderFactory.createXMLReader();BookHandler bookHandler = new BookHandler();parser.setContentHandler(bookHandler);parser.parse("books.xml");System.out.println(bookHandler.getNameList());} catch (SAXException | IOException e) {e.printStackTrace();}}
}class BookHandler extends DefaultHandler {private List<String> nameList;private boolean title = false;public List<String> getNameList() {return nameList;}// xml文档加载时public void startDocument() {System.out.println("Start parsing document...");nameList = new ArrayList<>();}// 文档解析结束public void endDocument() {System.out.println("End");}// 访问某一个元素public void startElement(String uri, String localName, String qName, Attributes atts) {if (qName.equals("title")) {title = true;}}// 结束访问元素public void endElement(String namespaceURI, String localName, String qName) {if (title) {title = false;}}// 访问元素正文public void characters(char[] ch, int start, int length) {if (title) {String bookTitle = new String(ch, start, length).trim();if (!bookTitle.isEmpty()) {System.out.println("Book title: " + bookTitle);nameList.add(bookTitle);}}}
}

2.7STAX处理方法

2.8其他第三方库

 

 

相关文章:

语法篇--XML数据传输格式

一、XML概述 1.1简介 XML&#xff0c;全称为Extensible Markup Language&#xff0c;即可扩展标记语言&#xff0c;是一种用于存储和传输数据的文本格式。它是由W3C&#xff08;万维网联盟&#xff09;推荐的标准&#xff0c;广泛应用于各种系统中&#xff0c;如Web服务、数据…...

【Redis】缓存雪崩、缓存击穿、缓存穿透

在使用 Redis 缓存时&#xff0c;常常会遇到三个主要的问题&#xff0c;分别是缓存雪崩、缓存击穿和缓存穿透。这些问题都可能导致缓存系统的性能下降或数据不一致性的问题。 一、缓存雪崩&#xff08;Cache Avalanche&#xff09; 缓存雪崩是指在某个时间点&#xff0c;缓存…...

通过示例学习 JavaScript 运算符 - 逻辑、比较、三元和更多 JS 运算符

JavaScript 有许多运算符,可用于对值和变量(也称为操作数)执行操作 根据这些 JS 运算符执行的操作类型,我们可以将它们分为七组: 目录 算术运算符赋值运算符比较运算符逻辑运算符三元运算符typeof操作员按位运算符 算术运算符 1. 加法运算符 2.减法运算符 3. 乘法运…...

基于微信小程序+Springboot校园二手商城系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3…...

excel 动态表头与合并列

零、希望Springboot-java导出excel文件&#xff0c;包括动态表头与下边合并的列 使用 org.apache.poi 与自己封装工具类实现相关功能。代码如下 一、代码 1、依赖 implementation(group: org.apache.poi,name: poi-ooxml,version: 4.1.0)implementation(group: org.apache.po…...

jenkins自动部署微服务到docker

1、代码上传到git&#xff1b; 2、jenkins拉取git的代码&#xff0c;maven打包&#xff0c;使用插件生成镜像&#xff0c;自动上传docker&#xff1b; 两个插件&#xff0c;一个打包插件&#xff0c;一个创建镜像上传docker仓库.&#xff08;将dockerfile内容搬到插件配置&…...

【蔚来汽车】蔚来20220713第三题-旅游规划 <模拟、滑动窗口>

【蔚来汽车】蔚来20220713第三题-旅游规划 牛牛对 n 个城市旅游情况进行了规划&#xff0c;已知每个城市有两种属性 x 和 y &#xff0c;其中 x 表示去第 i 号城市的花费&#xff0c;y 表示在第 i 号城市游玩后会得到的开心值。   现在牛牛希望从中挑选出一些城市去游玩&…...

[解决方案]Antd TreeSelect/Select placeholder失效

&#x1f50e;嘿&#xff0c;这里是慰慰&#x1f469;&#x1f3fb;‍&#x1f393;&#xff0c;会发各种类型的文章&#xff0c;智能专业&#xff0c;从事前端&#x1f43e; &#x1f389;如果有帮助的话&#xff0c;就点个赞叭&#xff0c;让我开心一下&#xff01;&#x1f…...

微人事 部门管理 模块 (十五)

部门管理的树展示和搜索 数据展示页是个树&#xff0c;我们一次性把数据加载出来也可以通过点一次id加载查询出来出来子部门&#xff0c;我们用一次拿到说有json数据加载出来 数据不多可以用递归&#xff0c;数据很多就用懒加载的方式 由于子部门比较深就不适合&#xff0c;权…...

【Terraform学习】使用 Terraform 从 EC2 实例访问 S3 存储桶(Terraform-AWS最佳实战学习)

使用 Terraform 从 EC2 实例访问 S3 存储桶 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_ec2_s3connet 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_…...

ZDRE6VP4-1X/50MG24K4V比例压力阀放大器

DRE 6-11/100MG24K4M比、DRE 10-6X/200YMG24K4M、DRE 20-52/200YMG24K4M、DRE 20-6X/200YMG24K4M、ZDRE6VP1-1X/315MG24N9K4M、ZDRE6VP4-1X/50MG24K4V、Z3DRE6VP2-2X/50G24K4M、Z3DRE6VP1-2X/100G24K4M、Z3DRE10VP2-1X/100XYG24K4M、Z3DRE10VP1-1X/315XLG24K4V 功能: 设定值通…...

纠缠辅助的量子网络:原理、技术、发展与挑战

7月11日&#xff0c;中国科大网络空间安全学院和陆军院士工作室李忠辉博士为第一作者、薛开平教授为通讯作者的量子网络综述论文“Entanglement-Assisted Quantum Networks: Mechanics, Enabling Technologies, Challenges, and Research Directions”在通信领域知名期刊《IEEE…...

React Native 可触摸组件基础知识

在 React Native 中要实现可触摸的组件方式有三种&#xff0c;第一种方式就是使用TouchableHighlight组件&#xff0c;第二种方式就是使用TouchableOpacity组件&#xff0c;最后一种方式就是使用TouchableWithoutFeedback组件。 TouchableHighlight TouchableHighlight组件主…...

用户、权限和Vim编辑器

用户 用户分类 超级管理员&#xff1a;可以登录&#xff0c;拥有所有权限&#xff0c;用户Id为0 普通用户&#xff1a;可以登录&#xff0c;但只能操作家目录&#xff0c;用户Id为1000 程序用户&#xff1a;不能登录&#xff0c;用于管理程序&#xff0c;用户Id为1~999 添…...

git版本管理加合并笔记

目录 1.创建空文件夹&#xff0c;右键Bash here打开 2.打开链接&#xff0c;点击克隆下载&#xff0c;复制SSH链接 3.输入git SSH链接 回车 4.换成https在桌面上进行克隆仓库就正常了 5.去vscode里改东西 6.提交 7.创建dev分支 8.在dev里修改内容&#xff0c;提交&…...

Failed to load property source from location ‘classpath:/application.yml‘

项目场景&#xff1a; 今天到公司启动项目&#xff0c;突然发现项目起不起来了 问题描述 出现 Failed to load property source from location ‘classpath:/application.yml’ 错误 原因分析&#xff1a; 刚开始以为是 application.yml 中格式错误&#xff0c;但是发现同…...

Ajax复习

Ajax复习 一、简介 ​ AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。 ​ 一句话总结&#xff1a;无刷新通信。 二、 特点 优点 无刷新通信 允许你根据用户事件来更新部分页面内容 缺点 没有浏览历史&#xff0c;不能回退 存在跨域问题…...

里式替换原则(LSP)

目录 简介: 作用: 过程: 总结: 简介: 里式替换原则&#xff08;Liskov Substitution Principle&#xff0c;简称LSP&#xff09;的提出者是美国计算机科学家Barbara Liskov。Barbara Liskov是一位计算机科学家&#xff0c;麻省理工学院教授&#xff0c;也是美国第一个计算机…...

mysql------做主从复制,读写分离

1.为什么要做主从复制&#xff08;主从复制的作用&#xff09; 做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xff0c;可切换到从数据库继续工作&#xff0c;避免数据丢失。 架构的扩展。业务量越来越大,I/O访问频率过高&#xff0c;单机无法满…...

Anaconda虚拟环境跨系统迁移

旧设备运行代码 conda activate name conda env export > environment.yml注意&#xff1a;如果当前路径已经有了 environment.yml 文件&#xff0c;conda 会重写这个文件 新设备运行代码 # 将environment.yml 拷贝到新设备中conda env create -f environment.yml...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...