XML学习笔记
XML被设计为“什么都不做”,XML只用于组织、存储数据,除此之外的数据生成、读取、传送等等的操作都与XML本身无关!#
XML语法:**<?xml version="1.0" encoding="utf-8" standalone="no"?>
- version:版本号
- encoding:编码
- standalone:yes/no 是否独立使用,默认 no
- 文档声明时,属性的位置不能变
元素:xml中的元素和标签指的是一个东西#
注意:XML语法是规范的不能乱写#
属性:XML元素的一部分,命名规范和元素一样#
<!--属性名是name,属性值是china-->
<中国 name="china">
</中国>
注释和XML一样#
CDATA:包裹的内容不会被解析,原封不动得输出*,语法:#
<![CDATA[
...内容
]]>
处理指令(PI)用来只会解析引擎如何解析xml内容#
如:<?xml-stylesheet type="text/css" href="1.css"?>
使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容
JDK中的XML API#
- JAXP:负责解析XML
- JAXB:负责将XML映射为java对象
什么是XML解析#
解析方式
- dom:文档对象模型
- sax:是XML社区的标准
解析操作
看出程序要访问XML文档的过程是先由解析器对文档进行分析,然后程序通过解析器所提供的DOM接口或SAX接口对分析结果进行操作,从而间接实现了对XML文档的访问
常用解析开发包
实际常用的是第三方解析,dom4j(对jdom进行了封装,他又对DOM进行了封装)
jaxp(JDK内置的开发包)
DOM解析操作#
DOM解析是一个基于对象的API,它把XML的内容加载到内存中,生成与XML文档内容对应的模型!当解析完成,内存中会生成与XML文档的结构与之对应的DOM对象树,这样就能够根据树的结构,以节点的形式对文档进行操作!
简单来说:DOM解析会把XML文档加载到内存中,生成DOM树的元素都是以对象的形式存在,通过对象来操作XML文档,DOM树:
XML文档的数据时带有关系型的,所以上面的DOM存在父节点、子节点、兄弟节点、后代和祖先的关系
核心接口#
- Document:代表整个XML文档(也可表示HTML文档),通过Document节点可以访问XML文件中所有的元素内容
- Node:Node节点在XML操作接口中相当于普通Java类的Object(XML接口中的爸爸),很多核心接口都实现了它
- NodeList:代表一个节点的集合,通常是一个节点中子节点的集合
- NameNodeMap:主要用于属性节点的表示,表示一组节点和其唯一的名称的对应关系
节点之间的关系:
Document也实现了Node接口,一个Document由多个Node组成,这样看来Document本身也是一个Node,就像java中类也是一个对象
dom4j解析技术#
基本操作
public void Test1() throws DocumentException {
// 第一步,通过创建SAXReader读取xml文件,获取Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read("x.xml");
// 第二步,通过Document对象,拿到XML的根元素对象
Element root = doc.getRootElement();
// 第三步,通过根元素获取所有的book标签对象
//elements("标签名")它可以拿到当前元素下指定的子元素集合
//此参数不能使用最大的那个闭合标签
List<Element> list = root.elements("Person");
// 第四步,遍历每个book标签对象,然后获取到book标签对象内的一个元素
//element("标签名")获取指定的标签对象(就是Element元素对象)
//通过getText()方法拿到起始标签和结束标签之间的文本内容
for(Element e : list){
System.out.println(e.element("boy").getText());
//asXML()方法将元素对象转换成字符串形式
System.out.println(e.asXML());
System.out.println(e.element("boy").asXML());
//elementText就()方法直接获取标签内的文本内容
System.out.println(e.elementText("boy"));
}
}
作者: "无问西东"
出处:https://www.cnblogs.com/csyh/p/12615953.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!