什么是xml解析?xml解析的有几种常用的解析方式?

article/2025/9/27 22:12:43

xml解析概述

XML解析主要为两种:DOM和SAX解析
DOM:文档对象模型,这种方式是W3C推荐的处理XML的一种方式
SAX解析不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它

XML解析开发包:
JAXP:是sun公司推出的解析标准实现
DOM4J:是开源组织推出的解析开发包(牛,大家都在用,包括SUN公司的一些技术的实现都在用)

JAXP:

JAXP:(Java API for XML Processing)开发包是JavaSE的一部分,它由以下几个包及其子包组成:
org.w3c.dom:提供DOM方式解析XML的标准接口
org.xml.sax:提供SAX方式解析XML的标准接口
javax.xml:提供了解析XML文档的类
javax.xml.parsers包中,定义了几个工厂类。我们可以通过调用这些工厂类,得到对XML文档进行解析的DOM和SAX解析器对象。
DocumentBuilderFactory
SAXParserFactory

javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 , DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回

JAXP解析流程
调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。

调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。

调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。
在这里插入图片描述
重写更新XML文档
javax.xml.transform包中的Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出,例如把xml文件应用样式表后转成一个html文档。利用这个对象,当然也可以把Document对象又重新写入到一个XML文件中。
Transformer类通过transform方法完成转换操作,该方法接收一个源和一个目的地。我们可以通过:
javax.xml.transform.dom.DOMSource类来关联要转换的document对象,
用javax.xml.transform.stream.StreamResult 对象来表示数据的目的地。
Transformer对象通过TransformerFactory获得
代码的具体实现:

package cn.itcast.jaxp;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;import cn.itcast.utils.JaxpDomUtil;/*** JAXP的Dom解析xml* @author Administrator**/
public class JaxpDomTest {public static void main(String[] args) {try {run3();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}//获取作者的文本内容public static void run1() throws Exception{//获取解析器工厂类DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//获取解析器对象DocumentBuilder builder = factory.newDocumentBuilder();//解析xml的文档,返回document对象Document document = builder.parse("src/book2.xml");//获取作者元素对象的集合,返回NodeListNodeList nodeList = document.getElementsByTagName("作者");//循环遍历,拿到每一个作者,打印文本内容,getTextContent()for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);System.out.println(node.getTextContent());}}//在末尾添加一个新的节点public static void run2() throws Exception{//获取解析器工厂类DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//获取文件解析器对象DocumentBuilder documentBuilder = factory.newDocumentBuilder();//解析xml文件,获取document对象Document document = documentBuilder.parse("src/book2.xml");//获取第二个对象Node book = document.getElementsByTagName("书").item(1);//创建元素对象Element cat = document.createElement("猫");//设置文本内容cat.setTextContent("我是猫");//将文本添加到元素对象下面book.appendChild(cat);//回写//创建回写类的工厂TransformerFactory transformer = TransformerFactory.newInstance();//获取回写类Transformer newTransformer = transformer.newTransformer();//调用回写的方法newTransformer.transform(new DOMSource(document), new StreamResult("src/book2.xml"));}
}

由于获得解析器工厂类,获取文件解析器对象,解析XML 获得文件对象,还有其重新方法每次使用都需要调用,故向上封装成了一个工具类,便于开发的时候直接来调用。

在这里插入图片描述
在这里插入图片描述
DOM4J解析XML文档
Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
使用Dom4j开发,需下载dom4j相应的jar文件。

DOM4J解析流程:
1.读取XML文件,获得document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File(“input.xml”));
2.解析XML形式的文本,得到document对象.
String text = “”;
Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement(“members”);
4.获取文档的根节点.
Element root = document.getRootElement();
5.取得某个节点的子节点.
Element element=node.element(“书名");
6.取得节点的文字
String text=node.getText();
DOM4J的运行代码如下所示:

package cn.itcast.dom4j;import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;/*** dom4j实现对数据的增加节点的操作* @author liugang**/
public class Dom4jTest {public static void main(String[] args) {try {run5();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}//修改指定的元素public static void run5() throws Exception{//获取解析器对象SAXReader reader = new SAXReader();//解析xml文件,返回document对象Document document = reader.read("src/book.xml");//获取跟节点Element root = document.getRootElement();//获取第二本书对象Element book2 = (Element) root.elements("书").get(1);Element money = book2.element("团购价");money.setText("1000");//回写方法//创建一个好看的对象OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer =  new XMLWriter(new FileOutputStream("src/book.xml"),format);writer.write(document);writer.close();}//删除指定的元素public static void run4() throws Exception{//获取解析器对象SAXReader reader = new SAXReader();//解析xml文件,返回document对象Document document = reader.read("src/book.xml");//获取跟节点Element root = document.getRootElement();//获取第二本书对象Element book2 = (Element) root.elements("书").get(1);Element cat = book2.element("猫");//删除猫book2.remove(cat);//回写方法//创建一个好看的对象OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer =  new XMLWriter(new FileOutputStream("src/book.xml"),format);writer.write(document);writer.close();}//在指定的位置下添加元素public static void run3() throws Exception{//获取解析器对象SAXReader reader = new SAXReader();//解析xml文件,返回document对象Document document = reader.read("src/book.xml");//获取跟节点Element root = document.getRootElement();//获取第二本书对象Element book2 = (Element) root.elements("书").get(1);//获得第二本书下的所有集合@SuppressWarnings("unchecked")List<Element> list = book2.elements();//创建元素对象,并添加进指定的位置Element money = DocumentHelper.createElement("团购价");money.setText("989");list.add(2,money);//重写//创建一个好看的对象OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer =  new XMLWriter(new FileOutputStream("src/book.xml"),format);writer.write(document);writer.close();}//在第二本书下添加子节点public static void run2() throws Exception{//获取解析器对象SAXReader reader = new SAXReader();//解析xml文件,返回documet对象Document document = reader.read("src/book.xml");//获取根节点Element root = document.getRootElement();//获取第二本书对象@SuppressWarnings("unchecked")List<Element> books = root.elements("书");Element book2 = books.get(1);//在第二本书对象中添加内容book2.addElement("猫").setText("我是猫");//回写//创建一个漂亮的格式OutputFormat format = OutputFormat.createPrettyPrint();//回下类XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);//回写文档writer.write(document);//关闭流writer.close();}//获取第二本书的作者的文本内容public static void run1() throws Exception{//获取解析器对象SAXReader reader = new SAXReader();//解析xml标签,返回document对象Document document = reader.read("src/book.xml");//获取跟节点Element root = document.getRootElement();//获取书的节点,获取第二本书@SuppressWarnings("unchecked")List<Element> books= root.elements("书");Element book2 = books.get(1);//获取作者的标签Element author = book2.element("作者");//获取文本内容System.out.println(author.getText());}
}

http://chatgpt.dhexx.cn/article/B0oD7Grv.shtml

相关文章

JAVA解析xml的五种方式比较

1)DOM解析 DOM是html和xml的应用程序接口(API)&#xff0c;以层次结构&#xff08;类似于树型&#xff09;来组织节点和信息片段&#xff0c;映射XML文档的结构&#xff0c;允许获取和操作文档的任意部分&#xff0c;是W3C的官方标准【优点】①允许应用程序对数据和结构做出更改…

XML解析的几种方式

xml的四种解析方式实例 一、DOM&#xff08;Document Object Model&#xff09;解析方式 在应用程序中,基于DOM的xml分析器将xml文档解析成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对xml数据的操作.通过DOM接口应用程序可以在任何时候访问…

C++解析XML文件

新的一周又来啦&#xff0c;这周我要分享的是使用C库解析XML文件和JSON文件&#xff0c;在本篇博客中我主要讲解析XML文件的相关知识&#xff0c;在下篇博客讲述有关解析JSON文件的相关。在解析XML文件时我使用的解析库是tinyXML2,编译平台是VS2019。希望看完本篇博客能对你有所…

解析XML的几种方式

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API fo…

C# 读取XML文件的几种方式

在开发过程中&#xff0c;我们有时会需要保存到本地一些结构化数据或者配置信息&#xff0c;这时就可以选择用xml文件。当然xml的用途也不仅仅是这些。 这一篇来谈一谈关于读取xml文件的几种方式&#xff1b; 我们有以下两个文件&#xff0c;一个是带有id属性的&#xff0c;一个…

Android解析XML的三种方式

在Android中提供了三种解析XML的方式:DOM(Document Objrect Model),SAX(Simple API XML),以及Android推荐的Pull解析方式. 如图: 本篇博客使用的xml文件如下:(这里是获取网络XML)person.xml <?xml version="1.0" encoding="UTF-8"?> <pers…

XML解析之SAX方式

XML文件解析方式之一是SAX方式&#xff0c;SAX解析方式会逐行地去扫描XML文档&#xff0c;当遇到标签时会触发解析处理器&#xff0c;采用事件处理的方式解析XML (Simple API for XML) 。SAX是一个用于处理XML事件驱动的“推”模型&#xff0c;虽然不是官方标准&#xff0c;但它…

实现XML解析的几种技术

XML在各种开发中都广泛应用&#xff0c;Android也不例外。作为承载数据的一个重要角色&#xff0c;如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。 在Android中&#xff0c;常见的XML解析器分别为SAX解…

MATLAB中的均值与方差求法(mean,var,std函数使用)

目录 均值-mean()函数的用法方差var函数std函数 均值-mean()函数的用法 对于矩阵A&#xff1a; &#xff08;1&#xff09;mean(A,1)为对矩阵A的列求均值 &#xff08;2&#xff09;mean(A,2)为对矩阵A的行求均值 &#xff08;3&#xff09;mean(A)当传入的参数只有矩阵时&a…

matlab怎么方差函数,密度函数已知,怎么用matlab求其数学期望和方差?

在没有先验知识的情况下是不可能的&#xff0c;在你已知它可能是哪种分布(或者哪些种分布之一)的情况下可以求出分布的参数www.mh456.com防采集。 因为你的是密度函2113数&#xff0c;所以不会5261是离散型随机变量&#xff0c;如果你有4102概率密度函数的表达式的话&#xff0…

matlab怎么算方差和标准差,matlab怎么求矩阵的均值和标准差 看完你就知道了

有时候我们在使用matlab编程计算的时候&#xff0c;想求矩阵的均值和方差&#xff0c;怎么求呢&#xff0c;下面来分享一下方法 工具/材料 matlab 求矩阵的均值和标准差方法 matlab求矩阵均值方法 01 第一步打开matlab命令行窗口&#xff0c;新建一个a[1 2 3;4 5 6;7 8 9]矩阵&…

剩余方差matlab,用matlab的var函数求方差

什么是方差和标准差&#xff1f; 方差(variance) 和标准差(standard variance) 方差&#xff1a;表示一组离散数据偏离平均值的程度。 公式&#xff1a; 方差公式 方差的算术平方根称为该随机变量的标准差。 在Matlab中&#xff0c;方差用var函数求&#xff0c;标准差用std函数…

matlab里方差分析的盒子图怎么看,Matlab方差分析

Matlab 方差分析(T检验) 在工农业生产和科学研究中,经常遇到这样的问题:影响产品产量、质量的因素很多,我们需要了解在这众多的因素中,哪些因素对影响产品产量、质量有显著影响.为此,要先做试验,然后对测试的结果进行分析.方差分析就是分析测试结果的一种方法.在方差分析中,把在…

20171205_Matlab求方差,均值,均方差,协方差的函数

1、 均值 数学定义&#xff1a; Matlab函数&#xff1a;mean >>X[1,2,3] >>mean(X)2 如果X是一个矩阵&#xff0c;则其均值是一个向量组。mean(X,1)为列向量的均值&#xff0c;mean(X,2)为行向量的均值。 >>X[12 3 45 6] >>mean(X,1)[2.5,3.5, 4.5] &g…

方差分析MATLAB实现

单因素方差分析的MATLAB实现 单因素均衡数据的实现 单因素非均衡数据方差分析 p192 8.22 X[85,80,90,88,87,94,56,62,55,48,92,99,95,91,75,72,81];group[ones(1,3),2*ones(1,4),3*ones(1,2),4*ones(1,2),5*ones(1,4),6*ones(1,3)];anova1(X,group); 从箱线图可以看到第2个第五…

matlab算方差std,MATLAB 方差函数 var std

1、均值 数学定义: Matlab函数:mean >>X=[1,2,3] >>mean(X)=2 如果X是一个矩阵,则其均值是一个向量组。mean(X,1)为列向量的均值,mean(X,2)为行向量的均值。 >>X=[1 2 3 4 5 6] >>mean(X,1)=[2.5, 3.5, 4.5] >>mean(X,2)=[2 5] 若要求整个矩…

matlab 方差,方差分解——matlab 代码

封面图片源自网络: 接着前面两期分析,今天介绍期限结构和收益率的方差分解代码: function var_plot= var_term( Phi_DRAW,OMIGA_ff_DRAW,HH) %%%% HH means the step length for forecast %%%%%%%%%% %%%%%% get the forecast variance decomposition %%%%%%% %%% SIGMA_u=P…

matlab u怎么求均方差,Matlab求方差,均值,均方差,協方差的函數

1、均值 數學定義&#xff1a; Matlab函數&#xff1a;mean >>X[1,2,3] >>mean(X)2 如果X是一個矩陣&#xff0c;則其均值是一個向量組。mean(X,1)為列向量的均值&#xff0c;mean(X,2)為行向量的均值。 >>X[1 2 3 4 5 6] >>mean(X,1)[2.5, 3.5, 4.5]…

Matlab系列教程_数值计算_求方差和标准差

首先&#xff0c;什么是方差和标准差&#xff1f; 方差&#xff0c;是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量&#xff0c;统计中的方差&#xff08;样本方差&#xff09;是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中&#xff…

MATLAB中均值、方差、均方差的计算方法

1、 均值 数学定义&#xff1a; &#xff08;自己搜一下&#xff09; Matlab函数&#xff1a;mean >>X[1,2,3] >>mean(X)2 如果X是一个矩阵&#xff0c;则其均值是一个向量组。mean(X,1)为列向量的均值&#xff0c;mean(X,2)为行向量的均值。 >>X[1 2 3 4 5 …