当前位置: 首页 > 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...

第四章 IRIS 编程简介 - Macros

文章目录 第四章 IRIS 编程简介 - MacrosMacrosInclude Files这些代码元素如何协同工作 第四章 IRIS 编程简介 - Macros Macros ObjectScript 还支持定义替换的宏。定义可以是一个值、整行代码或&#xff08;使用 ##continue 指令&#xff09;多行。使用宏来确保一致性。例如…...

大厂考核重点:mysql索引面试题

很多同学面对Mysql索引相关的面试题都是死记硬背的&#xff0c;这肯定是不行的&#xff0c;也不容易记住&#xff0c;所以大家还是要循循渐进&#xff0c;从理解开始&#xff0c;慢慢掌握&#xff0c;当然对于想要准备面试题的同学&#xff0c;这几个问题是需要记住并理解的&am…...

MySQL使用binlog日志做数据恢复

MySQL的binlog日志是MySQL日志中非常重要的一种日志&#xff0c;记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的读写分离、数据增量备份以及服务器宕机时的数据恢复。 定期备份固然可以在服务器发生宕机的时候快速的恢复数据&#xff0c;但传统的全量备份不可…...

USB Type-C端口集成式ESD静电保护方案 安全低成本

Type-C端口是根据USB3.x和USB4协议传输数据的&#xff0c;很容易受到电气过载&#xff08;EOS&#xff09;和静电放电&#xff08;ESD&#xff09;事件的影响。由于Type-C支持随意热插拔功能&#xff0c;其内部高集成度的芯片&#xff0c;更容易受到人体静电放电的伤害和损坏。…...

Shiro学习总结

第一章 入门概述 1.概念 shiro是一个Java安全框架&#xff0c;可以完成&#xff1a;认证、授权、加密、会话管理、与web集成、缓存… 2.优势 ● 易于使用&#xff0c;构建简单 ● 功能全面 ● 灵活&#xff0c;可以在任何应用程序环境中工作&#xff0c;并且不需要依赖它们…...

AS中回退git历史版本并删除历史提交记录

当您想把某个版本后的代码删除&#xff0c;回滚到指定的版本。可以使用一下的方法。 一、打开AS中git历史提交窗口 二、选择需要回滚的版本选项&#xff0c;右键弹出菜单。选择Reset Current Branch to Here... 三、选择 Hard 选项 soft&#xff1a;将合并的更改应用到当前分支…...

线性代数的学习和整理5: 矩阵的加减乘除及其几何意义

目录 1 矩阵加法 1.1 矩阵加法的定义 1.2 加法的属性 1.2.1 只有同类型&#xff0c;相同n*m的矩阵才可以相加 1.2.1 矩阵加法的可交换律&#xff1a; 1.2.2 矩阵加法的可结合律&#xff1a; 1.3矩阵加法的几何意义 2 矩阵的减法 2.1 矩阵减法定义和原理基本同 矩阵的…...

sqlsugar 使用TNS连接oracle

在使用SqlSugar连接Oracle数据库时&#xff0c;可以通过TNS来实现连接。以下是一个示例代码&#xff0c;展示了如何使用TNS连接Oracle数据库&#xff1a; 首先&#xff0c;确保您已经安装了Oracle客户端&#xff0c;并正确配置了TNS的相关信息。 // 引入SqlSugar命名空间 usi…...

用python解压zip文件

因为某个需求&#xff0c;需要用python处理解压文件&#xff0c;这里记录下完成的代码&#xff0c;需要注意的是删除解压出来的文件夹时&#xff0c;很多博客都说直接用removedirs就行&#xff0c;实际我在py3.7上测试会提示“文件夹非空”&#xff0c;而且想想如果直接移除了根…...

代码随想录22| 216.组合总和III, 17.电话号码的字母组合

216.组合总和III 题目链接/文章讲解&#xff1a;链接地址 视频讲解&#xff1a;链接地址 代码思路&#xff1a;回溯三部曲&#xff1a; 1.确定函数参数&#xff1a;n,k,sum,startIndex; 2.结束条件&#xff0c;path k,并且如果sumn 结束递归 3.递归回溯逻辑。 class Solution…...

福建省住房与城乡建设厅网站/seo可以从哪些方面优化

展开全部在XML文件中设置ImageView.Visibility"GONE"或"INVISIBLE"。或者在java代码文件中设置。代码&#xff1a;ImageView.setVisibility(View.GONE)&#xff0c;ImageView.setVisibility(View.VISIBLE)。其中&#xff1a;1、常量值e68a8432313133353236…...

服装网站建设中期目标/营销渠道分为三种模式

前置知识&#xff1a; 二阶行列式 定义&#xff08;三阶行列式&#xff09; 设有 9 个数排成 3 行 3 列&#xff08;横排称行、竖排称列&#xff09;的数表 a11a12a13a21a22a23a31a32a33(1)\begin{matrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_…...

淮阴区城乡建设管理局网站/seo企业推广案例

规模最大的区块链创新基金杭州“雄岸全球区块链百亿创新基金”昨日成立&#xff0c;资金规模达100亿元。在出资比例里&#xff0c;政府引导资金占到了总数的30%&#xff0c;其余70%为社会募集。由INBlockchain和暾澜投资组成的雄岸基金管理公司管理&#xff0c;其中INBlockchai…...

wordpress 建立小工具/深圳网络推广推荐

第 1 课0. Python 是什么类型的语言&#xff1f;Python 是脚本语言脚本语言(Scripting language)是电脑编程语言&#xff0c;因此也能让开发者藉以编写出让电脑听命行事的程序。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则&#xff0c;基于这项原则&#…...

重庆制作网站/网上的推广

CaseFormat是一种实用工具类&#xff0c;以提供不同的ASCII字符格式之间的转换。 类声明 以下是com.google.common.base.CaseFormat类的声明&#xff1a; GwtCompatible public enum CaseFormatextends Enum<CaseFormat> 枚举常量 方法 继承的方法 这个类继承了以下类方法…...

网络广告营销方案/天津债务优化公司

一般情况下只要设置Window——Preferences——见下图&#xff0c;打上勾&#xff0c;重新启动Ecplise就好了&#xff01;但是&#xff0c;有时候勾选了这个也没有用&#xff0c;这时候就需要进入eclipse安装目录&#xff0c;执行eclipse -clean命令清理缓存&#xff0c;启动以后…...