千家信息网

XML解析方法详解

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,今日目标:DOM、SAX、STAX、 XML解析API今日重点:JAXP DOM解析 、JAXP SAX解析、XML PULL解析。XML现在已成为一种通用的数据交换格式,平台的无关性使得很多场合都需
千家信息网最后更新 2026年11月01日XML解析方法详解

今日目标:DOM、 SAX、 STAX、 XML解析API

今日重点:JAXP DOM解析 、JAXP SAX解析、XML PULL解析。

XML现在已成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。深入了解前端知识更能充分解决自动化的异常类问题。

一、

1、XML有三种解析方式:DOM SAX STAX

2、XML的作用(企业应用):存储数据、配置文件、传输数据。

存储和传输数据经常一起使用,XML数据通常由程序生成的,用程序解析XML(XML一般不加约束)

配置文件单独使用(通常会加约束)

3、DOM

全称为:Document Object Model文档对象模型。

DOM的解析思想 :将整个XML数据读取到内存中,在内存中形成文档树形结构,

对内存中文档树形结构进行操作。

优点:API简单。因为一次性加载整个文档,文档所有数据都在内存中,所以简便易用 处理

较方便。可频繁修改XML文件内容(即可回写)。

缺点:需将整个XML文档加载到内存,消耗系统资源。速度较慢。当XML文档过大时,会导致

无法全部加载进内存,内存溢出问题。

**DOM是官方提供的XML解析标准,由W3C制定 。

4、SAX

全称为:Simple API for XMl简单XML解析API。

SAX解析思想:为解析器绑定回调程序Handler , 解析器读取xml文件,触发相应事件,

自动调用handler中对应事件方法

优点:SAX是轻量级的接口,解析速度快,无须占用太多内存资源。

缺点:SAX每次都要从头到尾遍历节点,修改不易实现。编程复杂,如在内存中不保留读取的数据,将无法回写。

注:如果SAX、STAX在内存中边读边保存数据的话 ,就类似于DOM了。

**SAX是民间XML解析标准,来自XML社区。

**采用"推"模式,PUSH。

5、STAX

全称是:Streaming API for XML ,XML解析流API。

STAX解析思想 :提高SAX模式解析效率。亦为边读边处理。

**采用"拉"模式,PULL。

*****以上三种解析方式:性能比较::STAX >SAX >DOM

6、什么是推模式?什么是拉模式?

PUSH:是以服务器为主,控制操作流程模式。

当你将文档和处理程序 交给解析器,解析器自动进行解析,调用相应事件处理方法 (该过程不由你自己控制)。

服务器主动向客户端发送信息,发送过程中客户端不能干预 。

PULL:是以客户端为主,控制操作流程模式。


********

JAXP:

全称是Java API for XML Processing。

它是一套API。DOM、SAX、STAX只是XML的解析思想。JAXP是DOM、SAX、STAX的API具体实现。

由SUN提供 ,在JDK 6.0以后全面支持DOM、SAX、STAX三种解析方式。

XML PULL:拉模式解析XML框架,内置集成Android手机内部 。

DOM4J:DOM解析方式框架,开源。在企业端JavaEE 软件开发中。为最流行开发框架。

javax.xml核心xml解析API,是DOM、SAX、STAX公用API。

org.w3c.dom 与DOM解析相关具体API

org.xml.sax 与SAX解析相关具体API


整个XML会被解析为树形结构,元素、属性、文本,都会被解析为 Node节点 。

********

7、DOM解析入门:

(一)

(1)创建解析器工厂

DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();

(2)根据解析器工厂获得解析器

DocumentBuilder documentBuilder=builderFactory.newDocumentBuilder();

(3)解析器读取XML文档进行解析,为Document对象(文档对象,代表整个XML文档)

Document document=documentBuilder.parse("test.xml");

(4)获得document文档后,就可以对它进行操作了。

例如 :可以通过getElementsByTagName查找指定名称元素NodeList。

NodeList nodeList=document.getElementsByTagName("name");

然后遍历集合获得每个Node节点。

for(int i=0;i

Element node=(Element)nodeList.item(i);

再通过Node的getTextContent获得节点文本内容 。

System.out.println(node.getTextContent());

}


(二)**node节点公共API中,

getNodeName()返回节点的名称

getNodeType()返回节点的类型

getNodeValue()返回节点的值


(三)**XML 提供数据只能通过两种情况 :

第一种 xml解析技术 第二种

* 获得元素文本子节点内容 获得元素后 element.getTextContent() element.getFirstChild().getNodeValue()

* 获得元素属性值 获得元素后 element.getAttribute(属性名)


(四)节点元素查询时

1、全局查找缩小范围

2、相对位置查找 父亲 儿子 兄弟 获得相对节点元素内容

注意事项

1、查询元素子节点时,注意回车换行

2、Document 类中 getElementById --- 使用时 xml文档必须有约束 DTD默认加载 , Schema需要编程


(五)对XML 进行增删改查 ---- 增加 、修改 、删除

* 对内存XML 文档修改后,回写到xml 文件中


添加节点 1、创建目标节点 document.createXXX 2、找到合适位置插入 父节点.appendChild

修改节点 1 修改文本内容 element.setTextContent(value) 2 修改属性 element.setAttribute(name,value)

删除节点 1 获得要删除节点o 2. o.getParentNode().removeChild(o);

**(详细代码参见代码附录)


8、JAXP SAX 解析API

原理见上。

事件

startDocument 文档开始事件

startElement 元素开始事件

characters 文本元素事件

endElement 元素结束事件

endDocument 文档结束事件


对于SAX编程不要求掌握,了解原理就可以了。


在startElement 中 获得 开始元素是什么?qName 获得开始标签属性内容 ?attributes.getValue("属性名称")

在characters 中 获得读取到文本元素是什么 ? new String(ch,start,length)

在endElement 中 获得当前结束元素是什么 ?qName


9、XML Pull 解析器

(一)为开源框架 ,使用STAX类似拉模式解析方式。Android手机系统内置 工具类库。

** 从事Android开发 。因为内置,无需下载任何jar包 ---- 如果从事JavaEE开发需要单独下载pull解析器类库。

**在pull 解析器官网上,看到pull解析器 API接口 。

**XNI2 XmlPull 、XPP3/MXP1 、kXML2 都是 pull解析器 接口API 的实现

**课程采用 xpp3 这套 pull解析器实现。

(二)什么是jar 包?

很多开源框架,会将class文件用zip格式进行压缩 获得压缩包。扩展名 jar (jar包)

(三)XML PULL 快速入门


(1)、去官网下载 zip 压缩包(xpp3-1.1.3.4.C_all.zip),解压缩获得jar包(xpp3-1.1.3.4.C.jar)。

(2)、在当前工程目录下新建lib文件夹,将该jar包放到lib目录下。

(3)、右击jar包,Add to build path 将jar包添加到 当前工程 build path.


事件

start document

start tag

text

end tag

end document


**使用pull解析器生成XML

(1)、获得解析器工厂

XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();

(2)、通过解析器工厂 获得序列化程序对象 XmlSerializer

XmlPullParser parser = parserFactory.newPullParser();

(3)、设置 输出XML文件 位置

(4)、开始写 存在5个方法写你需要内容


*** 能力: 将List中数据 序列化到一个XML文件中 。


10、XML PULL 解析方式 与 SAX push 最大区别?

程序员可以自己控制解析过程 。

用push 自动执行所有解析事件,使用pull 程序员可以控制只执行关注的那些事件,pull解析方式效率比push方式更高。


**获得元素属性 ----- 在元素开始时 ,通过parser.getAttributeValue(null,属性名称);

获得元素内部文本内容 ----- 在元素开始时, parser.nextText();


11、XML PULL 对xml文件 进行CURD (Create Update Read Delete)

* 使用pull 读取xml,读取内容不释放,在内存中保留 ---- DOM 类似

* 解析XML --- List 序列化 List --- XML

* 使用pull 进行增删改查 --- 读取xml全部数据保存内存list对象,对内存list对象进行增删改查。


元素 节点 文档 事件 数据 内存 文件 内容 模式 属性 方式 程序 对象 文本 框架 控制 全称 名称 工厂 思想 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 科技互联网政务服务 互联网巨头反垄断金融科技 迪茉互联网科技 成都互联网科技公司 兼蜜互联网科技 科技互联网的估值 字节跳动和互联网科技 武汉健翔互联网络科技有限公司 苏州铭阳互联网科技有限公司 互联网科技和法律行业 高科技互联网发展前景如何 明优互联网科技有限公司 特约风豹互联网科技为什么扣费 南通创西澳互联网科技有限公司 深圳无忧互联网科技 互联网科技年终奖 上海同邻互联网科技有限公司规模 科技互联网经济论坛 现代科技的标志之一的互联网 中关村互联网科技集团 科技创新与互联网经济 互联网与科技金融数据 紫鲸互联网科技 天下捷融互联网科技 滨湖区互联网智能科技产品供应 衡水科技产业互联网平台 宁夏科技产业互联网案例 南通创西澳互联网科技有限公司 富国互联网科技002692
0