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

学习日记-XML-day55-9.14

1.xml基本介绍

知识点

核心内容

重点

XML定义

可扩展标记语言,用于数据存储和传输

与HTML的区别(HTML用于展示,XML用于结构化数据

XML用途

1. 配置文件(Spring的beans.xml、Tomcat的server.xml);

2. 数据交换(早期替代方案,现多用JSON);

3. 小型数据库(如旧版QQ聊天记录存储)

配置文件场景(Spring/Maven/MyBatis) vs. 数据传输场景(JSON更主流)

XML技术解析

解析技术:DOM/SAX(老韩重点讲解DOM)

DOM解析(树形结构) vs. SAX解析(事件驱动)

XML现状

当前主要作用:配置文件(如Tomcat端口配置、Spring Bean管理)

与JSON的对比(XML更复杂,JSON更轻量)

XML层级关系

描述复杂数据关系(如《红楼梦》家族树)

嵌套标签的父子节点逻辑

XML配置文件示例

1. Tomcat的server.xml(端口配置);

2. Maven的pom.xml(依赖管理)

标签属性(如<Connector port="8080">)

2.xml快速入门

知识点

核心内容

重点

XML基础概念

XML是可扩展标记语言,标签可自定义(如<students>、<student>),与HTML预定义标签不同

根元素唯一性(如<students>为根节点,仅能有一个)

XML文档结构

包含声明(<?xml version="1.0" encoding="UTF-8"?>)、根元素、子元素层级(如<student>下嵌套<name>、<age>)

属性与子元素区别(如ID="100"是属性,<name>是子元素)

XML特性

可扩展性(可自由添加标签如<gender>)、层级化数据表示(类似DOM树结构)

与HTML对比(XML标签自定义,HTML标签固定)

XML语法规范

标签需正确闭合(如<name>Jack</name>),错误示例:未闭合标签会报错(start tag not closed)

编码声明重要性(encoding="UTF-8"避免乱码)

XML应用场景

存储结构化数据(如学生信息),支持跨平台数据交换

与JSON对比(XML更适合复杂层级数据)

3.xml语法(1)

知识点

核心内容

重点

XML文档声明

必须放在文件第一行,包含版本(如version="1.0")和编码(如utf-8)

声明格式严格性(不可随意放置

XML元素

标签及其内容(如<student>和</student>)

元素嵌套规则与闭合要求

XML属性

标签内的附加信息(如id="001")

属性值需用引号包裹(单/双引号均可)

XML注释

格式为<!-- 注释内容 -->,与HTML风格一致

注释不可嵌套

CDATA区

用于处理特殊字符(如<![CDATA[内容]]>)

4.xml语法(2)

知识点

核心内容

注意事项

示例演示

根元素规则

每个XML文档必须有且仅有一个根元素,需完全包含其他所有元素

多根元素会报错(multiple root elements)

错误示例:<emails>...</emails><students>...</students>

标签格式

开始标签与结束标签需成对出现;空标签可简写为<tag/>

交叉嵌套会导致语法错误(如<a><b></a></b>)

合法空标签:<city name="北京"/>

命名规则

- 区分大小写; - 禁止数字开头; - 禁止空格/冒号; - 可用下划线连接

Email与email视为不同标签;1job无效

合法命名:<book_name>三国演义</book_name>

术语等价性

标签(Tag)、元素(Element)、节点(Node)在XML中常指同一概念

不同场景下术语偏好不同(解析时多用“节点”)

示例:<student>可称标签/元素/节点

嵌套原则

子元素需合理嵌套在父元素内,禁止交叉嵌套

错误示例:<school><address></school></address>

正确嵌套:<school><address>...</address></school>

5.xml语法(3)

知识点

核心内容

重点

XML属性基本语法

属性与元素的关系、引号使用规则(双引号/单引号交替使用)

属性值引号嵌套规则(含单引号用双引号包裹,反之亦然)

属性命名规范

同一元素内属性名称必须唯一(区分大小写)

大小写敏感特性(ID与id视为不同属性)

属性值限制

禁止使用@符号、禁止重复定义同名属性

特殊字符处理(同时含单双引号需规避)

多属性应用

单个元素可包含多个不同属性(如id+class+sex)

属性与子元素区别(属性非子节点)

实际案例演示

student元素示例(id冲突演示、大小写区分验证)

复合引号场景处理(代码片段实操演示)

6.xml语法(4)

知识点

核心内容

重点

XML注释规则

注释不能嵌套,位置固定

嵌套会导致解析错误

CDATA节的作用

将内容强制识别为普通文本(避免XML解析引擎执行)

<![CDATA[...]]> 的语法结构

CDATA语法规则

尖括号+叹号+双层中括号包裹内容(<![CDATA[内容]]>)

禁止嵌套和包含]]>终止符

CDATA应用场景

存放含XML敏感字符的脚本/代码(如<script>标签)

与普通文本转义字符的对比

语法记忆技巧

类比注释结构(<!-- -->替换为中括号+CDATA)

中括号层数匹配易混淆

7.xml语法(5)

知识点

核心内容

重点

XML转义字符

使用转义形式显示特殊字符的原始样式(如 <→&lt;、>→&gt;、&→&amp;)

区分HTML与XML转义字符的异同

XML格式规范

声明语句、唯一根源素、大小写敏感、属性值引号、标记成对/空标记闭合、正确嵌套

根源素唯一性交叉嵌套报错

DOM解析应用

通过程序对XML文件进行增删改查(如修改年龄、删除节点)

遍历修改值与节点删除操作的代码实现

XML与HTML转义对比

两者均需转义特殊字符,但具体语法可能不同(如引号转义&quot;)

混淆XML/HTML转义符号的书写格式

8.xml解析技术介绍、

知识点

核心内容

重点

DOM破解技术

使用dom forge库解析XML/HTML文档,通过DOM树实现增删改查操作

dom forge与原生DOM、SAX解析技术的区别

XML解析原理

标记型文档(XML/HTML)被映射为DOM树结构,通过Java技术操作节点

DOM树的形成与节点层级关系

解析技术演进

早期JDK的DOM/SAX → jDOM → dom forge(主流)

技术迭代原因及适用场景对比

文档工具使用

本地文档路径:dom forge-1.6.1/docs/index.html(需浏览器打开)

版本兼容性(1.x与2.x差异)

核心类与方法

Element类提供addChild()、getText()等方法操作节点

方法调用时的IO流与OOP思想应用

安卓相关技术

Pool解析技术(仅限安卓开发,与Java无关)

与其他解析技术的横向对比

9.DOM4J介绍

知识点

核心内容

重点

DOM解析概念

DOM破解是一个简单灵活的开放源代码库,主要用于解析和处理XML文件

区分DOM解析与其他XML解析方式

DOM Forge特点

优秀且广泛使用的XML解析库,支持多种XML操作

新版旧版区别仅在于JDK适配

DOM Forge下载

官网提供多个版本下载(16/20/21等),下载后得到zip文件

版本选择不影响基本功能

文档学习能力

强调程序员应具备通过官方文档学习新技术的能力

文档学习与百度搜索的区别

Document对象获取方式

1. SAXReader解析XML文件;

2. 解析XML格式字符串;

3. 主动创建Document对象

三种方式的应用场景差异

XML文件操作

重点讲解查询操作,简要介绍增删改操作

查询操作的具体实现方式

实际应用场景

1. 解析现有XML文件;

2. 处理网络传输的XML数据;

3. 动态生成XML文件

不同场景下的技术选择

技术重要性

强调XML解析技术仍具实用价值,是完整知识体系的一部分

新技术环境下传统技术的定位

10.加载xml文件

知识点

核心内容

重点

DOM4J解析XML文件

使用SAXReader加载XML文件,生成Document对象,分析其底层结构(根元素rootElement、子节点content与elementData数组)

换行符被解析为文本节点(导致elementData数组长度与实际元素数量不一致)

XML文档结构解析

Document→rootElement→content→elementData层级嵌套,通过element逐层获取子节点(如name、age)

属性与文本值的存储位置(如student节点的id属性与name节点的文本值小龙女)

Debug技巧

通过断点调试观察Document对象成员属性(如DefaultDocument类实例、rootElement的content数组)

节点类型混淆(元素节点Element vs 文本节点Text)

XML节点遍历逻辑

从根元素递归遍历子节点,过滤无效文本节点(如换行符\n),定位目标元素(如student下的name)

数组索引与实际元素对应关系(如elementData[1]对应第一个有效student节点)

11.遍历xml指定元素

知识点

核心内容

重点

XML遍历方法

通过document.getRootElement()获取根节点,再使用elements("student")提取学生列表,循环处理子节点数据

区分element()与elements()方法的使用场景(单节点 vs 多节点)

节点数据提取

逐层获取子节点(如student.element("name")),通过getText()读取文本内容

注意处理空节点或异常格式,避免NullPointerException

代码调试技巧

通过断点分析content结构,验证节点层级与数据位置(如name节点下content存储实际值)

理解XML解析中隐式节点(如换行符\n)的影响

OOP编程思维

强调“方法必然存在”的面向对象设计原则(如rootElement提供标准API)

泛型List<Element>的类型安全使用

学生信息输出

拼接name、age、gender等字段,格式化展示(换行/空格分隔)

多字段处理时注意数据对齐与可读性

12.指定读取xml元素

知识点

核心内容

重点

XML文件指定读取

通过索引直接获取特定节点(如elements.get(0))

强制类型转换(Object转Element)

元素属性获取

使用attributeValue()方法直接读取唯一属性

属性名必须与XML标签完全一致

多层级数据提取

通过element().element()链式调用获取嵌套数据

resume字段漏写getText()导致输出异常

XPath技术

支持直接从根节点定位深层元素(未展开讲解)

与DOM4J组合使用可实现精准定位

异常处理机制

方法声明处使用throws统一处理异常

未展示具体异常捕获逻辑

对象类型验证

通过接口实现关系确认强制转换安全性(Element接口)

需明确运行时类型匹配

13.DOM4J增删改操作

知识点

核心内容

重点

XML节点读取

通过DOM解析获取指定学生信息

节点索引从0开始计数

XML节点添加

创建新节点并挂载到根节点

必须通过父节点添加子节点

XML节点删除

通过父节点移除指定子节点

不能直接删除自身节点

XML节点修改

遍历节点并更新属性值

字符串与数值类型转换问题

DOM操作原理

内存修改需通过IO流持久化

内存操作与文件同步机制

Java IO流应用

使用FileOutputStream写入XML

字节流与字符流区别

节点层级关系

parent-child节点操作逻辑

多级节点访问路径

14.DOM4J练习

根据XML文件中book元素的数量创建对应数量的Book对象

知识点

核心内容

重点

XML文件解析与对象映射

根据books.xml文件创建对应的Book对象,动态解析节点数量与属性

节点遍历逻辑 vs 对象属性映射

面向对象编程实践

定义Book类(含书名、作者、价格等字段),通过XML数据实例化对象

类属性与XML标签的命名一致性

集合框架应用

可选将生成的Book对象存入集合(如List<Book>)

集合类型选择(ArrayList/LinkedList)

实现步骤

1. 遍历XML的book元素;

2. 提取元素信息;

3. 创建Book对象

动态节点数量处理

15.DOM4J练习实现

知识点

核心内容

重点

XML文件解析(DOM方式)

通过Document.getElementsByTagName("book")遍历所有<book>元素,提取子节点(书名、作者、价格)及属性(ID)

需注意:

1. 节点名称需与XML标签严格匹配

2. 字符串到数值的转换(Integer.parseInt()/Double.parseDouble())

XML文件结构

示例:

xml<br><book id="100"><br> <name>西游记</name><br> <author>吴承恩</author><br> <price>80</price><br></book>

易忽略:

1. 根节点与嵌套层级

2. 属性与子元素的区别(attributeValue("id") vs elementText("name"))

Java对象映射

将XML数据转为Book对象:

- 定义包含id(Integer)、name(String)、price(Double)的类

- 通过setter方法赋值

关键操作:

1. 类型转换异常处理

2. toString()重写用于调试输出

DOM树底层结构

强调文档对象模型(树形结构):

- 根节点→子节点→属性/文本节点

- 斜杠路径表示层级关系

重点:

DOM树的增删改查逻辑均基于节点层级关系


文章转载自:

http://NICYn6UL.xbyyd.cn
http://oH2HzzLQ.xbyyd.cn
http://rxbUFH9z.xbyyd.cn
http://i3aA2DcY.xbyyd.cn
http://g6igD5Pg.xbyyd.cn
http://tDAtOkio.xbyyd.cn
http://nTD8hdqn.xbyyd.cn
http://a8JEvzW6.xbyyd.cn
http://V19mhXmQ.xbyyd.cn
http://kB396n8y.xbyyd.cn
http://Vzek00yC.xbyyd.cn
http://rsafDiGs.xbyyd.cn
http://QY82Omou.xbyyd.cn
http://345jPkox.xbyyd.cn
http://4AHUEUaE.xbyyd.cn
http://Gvg3EZbq.xbyyd.cn
http://lRI5cuzj.xbyyd.cn
http://9YiY2VRf.xbyyd.cn
http://Gekn500W.xbyyd.cn
http://RddgbK5Q.xbyyd.cn
http://radw1PuI.xbyyd.cn
http://BSmrfmn5.xbyyd.cn
http://i3fdYmbB.xbyyd.cn
http://Bp91UqAF.xbyyd.cn
http://9dXCiHSY.xbyyd.cn
http://ArQxyUp1.xbyyd.cn
http://pPQNmRX3.xbyyd.cn
http://Tog4M04o.xbyyd.cn
http://LtfXHA6t.xbyyd.cn
http://7QguYeDy.xbyyd.cn
http://www.dtcms.com/a/384516.html

相关文章:

  • SenseVoice + WebRTC:打造行业级实时语音识别系统的底层原理与架构设计
  • C++ 异常机制深度解析:从原理到实战的完整指南
  • 在 Qoder 等 AI 二创 IDE 里用 VS Code Remote-SSH 的“曲线连接”实战
  • 云计算与大数据技术深入解析
  • 如何用Verdi APP抽出某个指定module的interface hierarchy
  • MySQL 锁机制详解+示例
  • 消息队列的“翻车“现场:当Kafka和RocketMQ遇到异常时会发生什么?
  • 在Cursor上安装检索不到的扩展库cline的方式方法
  • 第二十一章 ESP32S3 IIC_OLED 实验
  • 能取代 transform 的架构目前看来 有哪些
  • 为什么基频是信号速率的1/2?
  • Unity UI坐标说明
  • 微美全息(NASDAQ:WIMI)以声誉混合多层共识,开启区块链共识算法创新篇章
  • LAN9253通过CHIP_MODE改变链路顺序
  • 矩阵运算_矩阵A和向量a的转置T相关
  • C++异步任务处理与消息可靠性保障指南:从基础到实战
  • 总结-十大管理输入输出
  • 【Vue3】09-编写vue时,reactive的使用
  • Transformer原理学习(2)位置编码
  • C++编程语言:标准库:第38章——输入输出流(Bjarne Stroustrup)
  • 北理工提出仅依赖机载传感器针对IAP的控制与状态估计框架
  • JVM 垃圾收集算法详解!
  • pycharm选择conda的interpreter
  • 为什么要将OpenCV帧转换为PIL图像
  • Apache ShardingSphere 实战:自定义 SQL 拦截插件开发指南
  • 【langchain】加载、处理和分割源数据文件
  • cmake .. -G “Visual Studio 12“
  • i.MX6ULL 外设初始化
  • Node.js如何实现一个WebSocket服务
  • 机器学习shap分析案例