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

XML解析

一,XML概述

1.什么是XML
  •  XML即为可扩展的标记语言(eXtensible Markup Language)
  •  XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识
2.XML和HTML不同之处
  • XML主要用于说明文档的主题,而HTML侧重描述文本的显示格式。
  • XML文档数据和格式分离,文档=文档数据+文档结构+文档样式

  •  XML是一种元标记语言,用户可以自己定义标记集,从而使数据具有自我描述性,而HTML的标记是不能自己定制的。
  •  XML支持Unicode字符集
3.Unicode
  •  Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。
  •  常用 Unicode
  •  UTF-8:以字节为单位对Unicode进行编码 。
  •  UTF-16 :以16位无符号整数为单位 。
  •  GB2312:gb2312 出现较早 ,一些汉字和繁体不支持。
  •  GBK: 95年重新修订了编码,命名GBK1.0,共收录了21886个符号。
  •  之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字,现在WINDOWS平台必需要支持
  • GBK18030编码。

      按照GBK18030、GBK、GB2312的顺序,3种编码是向下兼容,同一个汉字在三个编码方案中是相同的编码。

二,XML文档结构

1.XML元素
(1)规范的XML文档中关于元素的几条原则
  •  文档要包含一个或多个元素
  •  根元素(文档元素)唯一,且其无任何部分出现在其他元素中
  •  元素必须被正确关闭
  •  元素不得交叉
  •  属性值必须加引号(单引、双引均可)
(2)树形组织结构
  • 父元素
  • 子元素

2.XML与HTML标签对比

1. xml标签区分大小写(开始标签和结束标签大小必须一致)<tr></tr>
html标签不区分大小写<tr></TR>
2. xml中空元素标签必须被关闭<br/>
html中空元素标签可以不被关闭<br>
3. xml所有标签必须严格嵌套 <b><i></i></b>
html不一定严格嵌套 <b><i></b></i>
4. xml所有标签中的属性值字符必须加(“ ”)或(‘ ’),包括属性
值为数字时<student tel=‘0108888888’/>(内容有双引号使用
(‘’),内容有单引号使用(“”))
html属性值不一定用引号括起来 <hr color=blue>
5. xml只能有一个根元素
html可以有多个根元素

3.逻辑结构——XML文档结构

1. XML文档的构成一个格式良好的XML文档要包含三个部分:

  • XML声明
  • 处理指令(可选)
  • XML元素

三,XML解析

1.XML解析

1. 将 XML 数据从其序列化字符串格式转换为分层格式,获取对应信息的过程
2. 语言无关性
3. 常用的四种解析方式

  •  DOM
  •  SAX
  •  JDOM
  •  DOM4J
2.DOM解析

1. 优点

  •  允许应用程序对数据和结构做出更改
  •  访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据

2. 缺点

  •  通常需要加载整个XML文档来构造层次结构,消耗资源大。
3.SAX解析

1. SAX处理的优点非常类似于流媒体的优点,事件驱动
2. 优点

  •  不需要等待所有数据都被处理,分析就能立即开始
  •  只在读取数据时检查数据,不需要保存在内存中
  •  可以在某个条件得到满足时停止解析,不必解析整个文档
  •  效率和性能较高,能解析大于系统内存的文档

3. 缺点

  •  需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),文档越复杂程序就越复杂
  •  单向导航,无法定位文档层次,很难同时访问同一文档的不同部分数据
  •  无状态性,事件过后查询内容不会自动保存
4.JDOM解析

1. 优点

  •  使用具体类而不是接口,简化了DOM的API
  •  大量使用了Java集合类,方便了Java开发人员

2. 缺点

  •  没有较好的灵活性
  •  性能较差
5.DOM4J解析

1. 优点

  •  大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法
  •  支持XPath
  •  有很好的性能

2. 缺点

  •  大量使用了接口,API较为复杂

3.常用类

  •  Document - 表示整个XML文档。文档Document对象是通常被称为DOM树。
  •  Element - 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。
  •  Attribute - 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。
  •  Node - 代表元素,属性或处理指令

4.常用方法

  •  SAXReader.read(xmlSource)() - 构建XML源的DOM4J文档。
  •  Document.getRootElement() - 得到的XML的根元素。
  •  Element.node(index) - 获得在元素特定索引XML节点。
  •  Element.attributes() - 获取一个元素的所有属性。
  •  Node.valueOf(@Name) - 得到元件的给定名称的属性的值。

5. 文档读取

  •  SAXReader reader = new SAXReader();
  •  Document document = reader.read(new File(fileName));


6. 获取根节点

  •  root = document.getRootElement();


7. 遍历节点

  •  for ( Iterator i = root.elementIterator(); i.hasNext(); )
  •  Element element = (Element) i.next();

8. 创建xml文档

  •  Document document = DocumentHelper.createDocument();
  •  Element root = document.addElement("root");


9. 添加元素

  •  Element author2 = root.addElement(“student”)
  •  .addAttribute("name", “yaoMing")
  •  .addAttribute(“age", “20")
  •  .addText(“He is a boy");


10. I/O流生成xml文档

  •  FileWriter fileWiter = new FileWriter(“XXX.xml"))
  •  XMLWriter writer = new XMLWriter(fileWriter);
  •  writer.write( document );

相关文章:

XML解析

一&#xff0c;XML概述 1.什么是XML XML即为可扩展的标记语言&#xff08;eXtensible Markup Language&#xff09; XML是一套定义语义标记的规则&#xff0c;这些标记将文档分成许多部件并对这些部件加以标识 2.XML和HTML不同之处 XML主要用于说明文档的主题&#xff0c;而…...

PlasmidFinder:质粒复制子的鉴定和分型

质粒&#xff08;Plasmid&#xff09;是一种细菌染色体外的线性或环状DNA分子&#xff0c;也是一种重要的遗传元素&#xff0c;它们具有自主复制能力&#xff0c;可以在细菌之间传播&#xff0c;并携带多种重要的基因(如耐药基因与毒力基因等)功能。根据质粒传播的特性&#xf…...

PTA数据结构作业一

6-1 链表的插入算法 本题要求实现一个插入函数&#xff0c;实现在链表llist中的元素x之后插入一个元素y的操作。 函数接口定义&#xff1a; int InsertPost_link(LinkList llist, DataType x, DataType y); 其中 llist是操作的链表&#xff0c;x是待插入元素y的前驱节点元素…...

2024年总结【第五年了】

2024年总结 北国绕院扫雪&#xff0c;南方围炉烹茶&#xff0c;且饮一杯无? 执笔温暖不曾起舞日子里的点点滴滴&#xff0c;誊写一段回忆&#xff0c;还以光阴一段副本。 那么你要听一支新故事吗&#xff1f;第五年总结的片碎。 衣单天寒&#xff0c;走趟流星孤骑&#xf…...

java实现一个kmp算法

1、什么是KMP算法 Kmp 算法是由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt提出的&#xff0c;改进字符串匹配的算法&#xff1b; Kmp 算法的核心是利用匹配失败的信息&#xff0c;尽量减少模式串与主串的匹配次数&#xff0c;以达到 快速匹配的目的&#xff1b; Kmp 算法的时…...

强化学习方法分类详解

强化学习方法分类详解 引言 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种通过智能体与环境互动来学习如何做出最佳决策的方法。根据不同的优化中心、策略特性、环境模型、奖励函数、动作空间类型以及行为策略和目标策略的一致性&#xff0c;RL可以分为…...

雅思真题短语(二十八)

真题短语收录在合辑。 541法律官员 work as a solicitor 542前卫 a radical and expensive scheme 543反对者们 objectors 544破坏 demolishing buildings 545蒸汽机车 steam locomotives 546冷凝 steam could be condensed 547烟雾 smoke and fumes 548通风井 ventilation sh…...

在Linux系统中使用字符图案和VNC运行Qt Widgets程序

大部分服务器并没有GUI&#xff0c;运行的是基础的Linux系统&#xff0c;甚至是容器。如果我们需要在这些系统中运行带有GUI功能的Qt程序&#xff0c;一般情况下就会报错&#xff0c;比如&#xff1a; $ ./collidingmice qt.qpa.xcb: could not connect to display qt.qpa.plu…...

Python基于EasyOCR进行路灯控制箱图像文本识别项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着城市化进程的加快&#xff0c;智能城市建设成为了现代社会发展的重要方向。路灯作为城市基础设…...

Github 2024-12-28 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-12-28统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Python项目1egui: 一个简单、快速且高度可移植的 Rust GUI 库 创建周期:1903 天开发语言:Rust协议类型:Apache Li…...

提升生产力工具

VSCODE插件 干货&#xff1a;用好这13款VSCode插件&#xff0c;工作效率提升10倍 - 程序员柠檬 - 博客园 Sourcetrail Sourcetrail 是一个开源且免费的源码阅读工具&#xff0c;以其强大的代码导航、可视化及跨平台支持特性&#xff0c;成为开发者理解复杂代码库的得力助手。…...

【蓝桥杯——物联网设计与开发】系列前言

前言 本系列博客是博主为准备2024年第十五届蓝桥杯大赛物联网设计与开发赛道而写&#xff0c;经过4个月学习备战&#xff0c;最终获得全国一等奖。 从第十六届蓝桥杯大赛开始&#xff0c;物联网赛道更换竞赛实训平台。之前的博客&#xff0c;可以借鉴代码思想&#xff0c;但引脚…...

【Java基础】02.Java数据类型

目录 Java 数据类型 3.1 java程序中 “” 号的使用 3.2 java中的数据类型 3.2.1 基本数据类型&#xff1a;数值型 &#xff08;1&#xff09;整数类型 &#xff08;2&#xff09;浮点&#xff08;小数&#xff09;类型 3.2.2 基本数据类型&#xff1a;字符型 3.2.3 基本…...

Python爬虫(一)- Requests 安装与基本使用教程

文章目录 前言一、简介及安装1. 简介2. 安装 Requests2.1 安装2.2 检查安装是否成功 二、使用 Requests 发送 HTTP 请求1. 发送 GET 请求2. 发送 POST 请求3. 发送 PUT 请求4. 发送 DELETE 请求5. 发送 HEAD 请求6. 发送 OPTIONS 请求 三、传递参数1. GET 请求传递 URL 参数1.1…...

线段树保姆级教程

买水果 Description 水果姐今天心情不错&#xff0c;来到了水果街。 水果街有n家水果店&#xff0c;呈直线结构&#xff0c;编号为1~n&#xff0c;每家店能买水果也能卖水果&#xff0c;并且同一家店卖与买的价格一样。 学过oi的水果姐迅速发现了一个赚钱的方法&#xff1a…...

logback之自定义过滤器

logback有两种过滤器&#xff0c;一种是context中的过滤器叫TurboFilter&#xff0c;是一个全局的过滤器&#xff0c;会影响所有的日志记录。另一种是Appender中的过滤器&#xff0c;只对所在的append有效。两者大同小异&#xff0c;这里我们以Appender的过滤器为例。 &#x…...

如何用CSS3创建圆角矩形并居中显示?

在网页设计中&#xff0c;圆角矩形因其美观和现代感而被广泛使用&#xff0c;居中显示元素也是一个常见的需求。今天&#xff0c;我们将学习如何使用CSS3的border-radius属性来创建圆角矩形&#xff0c;并将其居中显示在页面上。 如果你正在学习CSS&#xff0c;那么这个实例将非…...

Java 开发中的指定外部 Jar 路径详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…...

python爬虫--小白篇【selenium自动爬取文件】

一、问题描述 在学习或工作中需要爬取文件资源时&#xff0c;由于文件数量太多&#xff0c;手动单个下载文件效率低&#xff0c;操作麻烦&#xff0c;采用selenium框架自动爬取文件数据是不二选择。如需要爬取下面网站中包含的全部pdf文件&#xff0c;并将其转为Markdown格式。…...

TI毫米波雷达原始数据解析之Lane数据交换

TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输&#xff0c;使用mmWave Studio 配置过程中有一个选项是LVDS L…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...