推广 热搜: 隔膜泵  地面  资源  2023  原理  饮品  桥式起重机  济宁缓冲床  塑料杯  龙门吊出租厂家 

解析xml 、解析xml失败的原因

   日期:2023-04-09     浏览:49    评论:0    
核心提示:java解析xml的几种方式哪种***?(1)DOM解析DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取;(2)SAX(S

java解析xml的几种方式哪种***?

(1)DOM解析

DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取;

(2)SAX(Simple API for XML)解析

流模型中的"推"模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,事件推给事件处理器,通过回调方法;

(1)、dom解析

dom解析是html和xml的应用程序接口(api) 以层次结构(类似与树形)来组织节点 和信息片段 映射xml文档的结构 允许获取和操作文档的任意部分 是官方标准

(2)、sax解析

流模型中in个的 推 模型 分析方式 通过事件驱动 没发现一个节点就引发一个事件 事件推给事件处理期 遍历回调方法

(3)、stax

流模型中的拉模型分析方式 提供基于指针和基于迭代器两种方式 的支持1.6新特征

(4)、jdom

java特定的文档对象模型 自身不包含解析器 使用sax

(5)、jdom4j

简单易用 采用java集合框架 兵完全支持dom sax 和jaxp

java的xml的解析方式有什么,他们的解析流程是怎么样的,有什么区别

答:4种。(或者说是两种,因为JDOM和DOM4J是DOM的两个特殊情况)

1.SAX解析

解析方式是事件驱动机制!

SAX解析器,逐行读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时,触发事件。

可以在这些事件发生时,编写程序进行相应的处理。

优点:

分析能够立即开始,而不是等待所有的数据被处理。

逐行加载,节省内存,有助于解析大于系统内存的文档。

有时不必解析整个文档,它可以在某个条件得到满足时停止解析。

缺点:

1.单向解析,无法定位文档层次,无法同时访问同一个文档的不同部分数据(因为逐行解析,当解析第n行时,第n-1行)已经被释放了,无法再对其进行操作)。

2. 无法得知事件发生时元素的层次, 只能自己维护节点的父/子关系。

3. 只读解析方式, 无法修改XML文档的内容。

2. DOM解析

是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个 文档和内存中建立文档树模型。程序员可以通过操作文档树, 来完成数据的获取 修改 删除等。

优点:

文档在内存中加载, 允许对数据和结构做出更改。访问是双向的,可以在任何时候在树中双向解析数据。

缺点:

文档全部加载在内存中 , 消耗资源大。

3. JDOM解析

目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是*** 个Java特定模型,JDOM一直得到大力推广和促进。

JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题” (根据学习曲线假定为20%)

优点:

使用具体类而不是接口,简化了DOM的API。

大量使用了Java集合类,方便了Java开发人员。

缺点:

没有较好的灵活性。

性能不是那么优异。

4. DOM4J解析

它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath 支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项, DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一 个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。

目前许多开源项目中大量采用DOM4J , 例如:Hibernate。

在java中解析xml有哪几种方法

(1)DOM解析

DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取

和操作文档的任意部分,是W3C的官方标准

【优点】

①允许应用程序对数据和结构做出更改。

②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。

【缺点】

①通常需要加载整个XML文档来构造层次结构,消耗资源大。

【解析详解】

①构建document对象:

documentBuilderFactory dbf = documentBuilderFactory.newInstance();

documentBuilder db = bdf.newdocumentBuilder();

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);

document doc = bd.parse(is);

②遍历DOM对象

document: XML文档对象,由解析器获取

NodeList: 节点数组

Node: 节点(包括element、#text)

Element: 元素,可用于获取属性参数

(2)SAX(Simple API for XML)解析

流模型中的"推"模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,事件推给事件处理器,通过回调方法

完成解析工作,解析XML文档的逻辑需要应用程序完成

【优势】

①不需要等待所有数据都被处理,分析就能立即开始。

②只在读取数据时检查数据,不需要保存在内存中。

③可以在某个条件得到满足时停止解析,不必解析整个文档。

④效率和性能较高,能解析大于系统内存的文档。

【缺点】

①需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),文档越复杂程序就越复杂。

②单向导航,无法定位文档层次,很难同时访问同一文档的不同部分数据,不支持XPath。

【原理】

简单的说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束时通知事件

处理函数(回调函数),进行相应处理,直到文档结束

【事件处理器类型】

①访问XML DTD:DTDHandler

②低级访问解析错误:ErrorHandler

③访问文档内容:ContextHandler

【Def***ltHandler类】

SAX事件处理程序的默认基类,实现了DTDHandler、ErrorHandler、ContextHandler和EntityResolver接口,通常

做法是,继承该基类,重写需要的方法,如startdocument()

【创建SAX解析器】

SAXParserFactory saxf = SAXParserFactory.newInstance();

SAXParser sax = saxf.newSAXParser();

注:关于遍历

①深度优先遍历(Depthi-First Traserval)

②广度优先遍历(Width-First Traserval)

(3)JDOM(Java-based document Object Model)

Java特定的文档对象模型。自身不包含解析器,使用SAX

【优点】

①使用具体类而不是接口,简化了DOM的API。

②大量使用了Java集合类,方便了Java开发人员。

【缺点】

①没有较好的灵活性。

②性能较差。

(4)DOM4J(document Object Model for Java)

简单易用,采用Java集合框架,并完全支持DOM、SAX和JAXP

【优点】

①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。

②支持XPath。

③有很好的性能。

【缺点】

①大量使用了接口,API较为复杂。

(5)StAX(Streaming API for XML)

流模型中的拉模型分析方式。提供基于指针和基于迭代器两种方式的支持,JDK1.6新特性

【和推式解析相比的优点】

①在拉式解析中,事件是由解析应用产生的,因此拉式解析中向客户端提供的是解析规则,而不是解析器。

②同推式解析相比,拉式解析的代码更简单,而且不用那么多库。

③拉式解析客户端能够一次读取多个XML文件。

④拉式解析允许你过滤XML文件和跳过解析事件。

【简介】

StAX API的实现是使用了Java Web服务开发(JWSDP)1.6,并结合了Sun Java流式XML分析器(SJSXP)-它位于

javax.xml.stream包中。XMLStreamReader接口用于分析一个XML文档,而XMLStreamWriter接口用于生成一个

XML文档。XMLEventReader负责使用一个对象事件迭代子分析XML事件-这与XMLStreamReader所使用的光标机制

形成对照。

Android 中有哪几种解析 xml 的类,官方推荐哪种

在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(document Objrect Model),以及Android推荐的Pull解析方式.下面就对三种解析方式一一详细阐述。

首先介绍SAX解析,SAX是事件驱动型XML解析的一个标准接口不会改变 SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束

下面介绍DOM解析,DOM,即对象文档模型,它是将整个XML文档载入内存(所以效率较低,不推荐使用),每一个节点当做一个对象

下面介绍Pull解析,是Android推荐使用,更适合移动设备,以下代码讲解

public class PulPersonService {

public ListPerson getPersons(InputStream instream) throws Exception {

ListPerson persons = null;

Person person = null;

XmlPullParser parser = Xml.newPullParser();//得到Pull解析器

parser.setInput(instream, "UTF-8");//设置下输入流的编码

int eventType = parser.getEventType();//得到***个事件类型

while (eventType != XmlPullParser.END_document) {//如果事件类型不是文档结束的话则不断处理事件

switch (eventType) {

case (XmlPullParser.START_document)://如果是文档开始事件

persons = new Arr***ListPerson();创建一个person集合

break;

case (XmlPullParser.START_TAG)://如果遇到标签开始

String tagName = parser.getName();// 获得解析器当前元素的名称

if ("person".equals(tagName)) {//如果当前标签名称是person

person = new Person();//创建一个person

person.setId(new Integer(parser.getAttributevalue(0)));//将元素的属性值赋值给id

}

if (person != null) {//如果person已经创建完成

if ("name".equals(tagName))//如果当前节点标记是name

person.setName(new String(parser.nextText()));

else if ("age".equals(tagName))//如果当前元素节点标记是age

person.setAge(new Short(parser.nextText()));

}

break;

case (XmlPullParser.END_TAG)://如果遇到标签结束

if ("person".equals(parser.getName())) {//如果是person标签结束

persons.add(person);//将创建完成的person加入集合

person = null;//并且置空

}

break;

}

eventType=parser.next();//进入下一个事件处理

}

return persons;

}

XML解析器是个什么东西

转帖

如需操作某个XML文档,需要XML解析器。解析器会将文档载入电脑的内存中。

最基础的:

基于事件的XML简单API(Simple API for XML)称为SAX,SAX 采用的事件模型。SAX 解析器在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。但用 SAX 解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。

基于树和节点的文档对象模型(document Object Module)称为DOM,DOM 采用建立树形结构的方式访问。DOM 解析器把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。用 DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用 DOM 解析器的时候需要处理整个 XML 文档,所以对性能和内存的要求比较高,尤其是遇到很大的 XML 文件的时候。由于它的遍历能力,DOM 解析器常用于XML文档需要频繁的改变的服务中。

其他上层API:

基于SAX和DOM两者的:

JAXP(Java API for XML Processing)包含javax.xml.parsers和transform;其中parsers包中包括4个主要类SAXParser和SAXParserFactory类创建SAX XMLReader接口例程,documentBuilder和documentBuilderFactory类创建DOM document接口例程。

DOM4J:一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

XERCES:Xerces是由Apache组织所推动的一项XML文档解析开源项目,支持文档对象模型(DOM)和XML简单应用编程接口(SAX)。对于DOM解析,有DOMParser和IDOMParser;对于SAX解析,有SAXParser。它目前有多种语言版本包括JAVA、C++、PERL、COM等。

仅基于DOM的:

JDOM:Jason Hunter和Brett McL***ghlin开发的项目,JDOM的设计目标就是在读和创建XML时简化DOM,取代DOM。

微软的MSXML解析器:微软的XML解析器是存在于IE 5.0或更高版本中的COM组件。一旦你安装了IE,就可使用脚本来利用解析器了。微软给我们提供XML语法解析器,一个叫做MSXML.DLL的动态链接库(C语言)

仅基于SAX的:

StAX(Streaming API for XML ):JSR-173 提出了一种面向流的新方法。其目的,简化编程,取代SAX。JDK6.0中除了DOM和SAX之外集成的又一种处理XML文档的API。

其他:

XALAN:xalan-java是一套xslt处理器,用来将XML文件转换为HTML,TEXT和XML等其他类型文件格式。支持XSLT1.0和XPATH 1.0版。开发人员可以通过命令行方式或在JAVA APPLET和SERVLET中使用,并可以作为自己开发的应用程序的类库使用。xalan-java实现的是transformation API for XML(TRaX)接口,此接口为jaxp1.2标准中的一部分。

在CLDC环境下运作的开放原始码XML分析器──kXML和NanoXML。Enhydra的KXML是一个只占很小存储空间的XML语法分析程序,对于J2ME应用程序非常适合。

关于解析xml和解析xml失败的原因的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

原文链接:http://www.dtcchina.com/news/show-50418.html,转载和复制请保留此链接。
以上就是关于解析xml 、解析xml失败的原因全部的内容,关注我们,带您了解更多相关内容。
 
标签: 文档 事件 模型
打赏
 
更多>同类资讯
0相关评论

推荐资讯
网站首页  |  VIP套餐介绍  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  手机版  |  SITEMAPS  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报