学习日记-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转义字符 | 使用转义形式显示特殊字符的原始样式(如 <→<、>→>、&→&) | 区分HTML与XML转义字符的异同 |
XML格式规范 | 声明语句、唯一根源素、大小写敏感、属性值引号、标记成对/空标记闭合、正确嵌套 | 根源素唯一性和交叉嵌套报错 |
DOM解析应用 | 通过程序对XML文件进行增删改查(如修改年龄、删除节点) | 遍历修改值与节点删除操作的代码实现 |
XML与HTML转义对比 | 两者均需转义特殊字符,但具体语法可能不同(如引号转义") | 混淆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树的增删改查逻辑均基于节点层级关系 |