SAX操作解析带属性的元素
- 格式:doc
- 大小:24.50 KB
- 文档页数:2
xpath attribute 用法XPath attribute 用于选择 XML 或 HTML 文档中具有特定属性的元素。
使用 attribute 语法可以根据元素的属性名和属性值来选择元素。
下面是一些有关 XPath attribute 用法的详细说明。
1.选择具有特定属性的元素:使用 attribute 语法可以选择具有特定属性的元素。
例如,以下XPath 表达式可以选择具有 "class" 属性的所有元素:2.选择具有特定属性值的元素:可以使用 attribute 语法来选择具有特定属性值的元素。
以下是一些示例 XPath 表达式:3.使用逻辑运算符选择多个属性:可以使用逻辑运算符(如 "and" 和 "or")结合多个属性来选择元素。
以下是一些示例 XPath 表达式:4.选择具有某个属性名的元素:可以使用 attribute 语法选择具有特定属性名的元素。
以下是一个示例 XPath 表达式:5.使用通配符选择属性值:可以使用通配符来选择属性值的一部分。
例如,以下 XPath 表达式可以选择属性 "class" 值以 "header" 开头的所有元素:以上仅是一些关于 XPath attribute 用法的基本说明。
XPath 还提供了更多的功能,如选择特定属性不存在的元素(使用 "not" 运算符)、根据属性值的部分匹配选择元素等等。
使用 XPath attribute 可以方便地选择和定位文档中具有特定属性的元素,从而更好地解析和处理 XML 或 HTML 文档中的数据。
XML(Extensible Markup Language)是一种元标记语言,可以用来描述数据。
XML提供了一种标准化的方式,使程序和应用程序可以有效地共享数据,而不受数据类型和平台的限制。
XML的语法包括文档格式、元素、属性和实体等。
一、XML文档格式XML文档是一个标记文档,包含一个XML声明,一个根元素和其他元素。
XML声明用来声明文档的版本号、编码方式和其他信息。
根元素是文档的起始点,它可以包含其他元素和属性。
其他元素是根元素的子元素,可以包含其他元素和属性。
属性是元素的附加信息,可以用来描述元素的语义。
二、XML元素XML元素是文档的基本单位,用来描述数据。
元素可以包含子元素,也可以包含属性。
元素的起始标签和结束标签之间的内容是元素的内容。
元素的内容可以是文本、其他元素、属性或实体。
三、XML属性XML属性是元素的附加信息,可以用来描述元素的语义。
属性的值可以是字符串、数值、日期或其他类型的数据。
属性的名字应该使用驼峰命名法,即首字母小写,其余字母大写。
属性的值应该使用双引号括起来,以区分属性的名字和值。
四、XML实体XML实体是一个名称,可以用来表示一个完整的文本或其他数据。
实体可以用来替换XML中的文本或其他数据,以提高XML文档的可读性和可维护性。
五、XML语法错误XML文档的语法错误可能会导致XML解析器无法解析文档。
常见的XML语法错误包括:1. 缺少元素或属性的起始标签或结束标签。
2. 元素或属性的名字错误,或者名字不符合驼峰命名法。
3. 元素或属性的值不符合XML的语法规则,例如字符串值缺少引号或实体值缺少引号。
4. 属性的名字与元素的名字相同。
5. 文档格式不正确,例如缺少XML声明或根元素。
六、XML文档解析XML文档可以使用XML解析器解析,以获取文档的内容。
XML解析器可以使用SAX(Simple API for XML)或DOM(Document Object Model)等方式解析文档。
这样的错误处理方式绝对不能接受!使用这样的代码将会惹恼用户、激怒老板,如果CEO 收到大客户谴责的邮件,可能会惹火身边那些不得不加班查找问题的人。
首先,实际上您已经编写了错误处理代码。
不精确地讲,包含System.err.println()语句的catch块可以被认为是错误处理,这是一个非常拙劣的方法。
错误处理代码不仅仅是一个错误报告—高质量的错误处理应该是:∙用户友好性。
∙无中断(除非必须如此)。
∙具有告知性。
错误处理是用户友好的最重要的是,错误处理代码针对的是应用程序的用户。
实际上,程序最终都是为用户服务的。
甚至您自己的调试语句都可以帮助您了解发生的问题,这样就可以修复功能。
功能是为用户服务的。
错误处理代码同样也是。
当然,“用户” 这个词可以具有多种不同的含义,尤其是如果不编写面向用户的代码的话。
如果您的应用系统是在公司和银行之间传输财务数据的后端系统,那么,您的用户可能是一些公司的内部部门或银行。
如果代码仅仅是供另外一个部门使用的基础代码,那么,这个部门就是您的用户。
所以,首先要确定的是,谁是您的用户?一旦确定您的客户是新泽西州的电脑用户,还是三楼的Web 开发人员,或是纽约证券交易所的主席,就可以编写对那些用户(或用户类)友好的代码。
对于消费者,需要提供不涉及编程术语的、易读的错误消息;对于网站开发人员,需要提供本部门或系统管理小组的联系方式;对于银行的CEO,错误处理最好不要中断他们的工作。
实际上,在过多考虑错误消息之前,最好认识到并不是所有的错误处理代码都必须报告错误。
错误处理是不中断的(除非必须如此)如果在您开车上班的路上,遇到一个大型的施工项目阻塞了交通,您不用把车靠到路边,熄火,在心里思考如何修饰自己的简历,因为您担心这次迟到而被解雇。
这是很愚蠢的。
您可以找到下一个出口并确定备用路线。
这也许会花去一些额外的时间,甚至要打电话告知某人您将不能按时参加早上8 点的会议。
但是尽管受到施工问题的影响,您仍然找到了解决方法。
读写XML的四种方法XML(eXtensible Markup Language)是一种用于表示和传输数据的标记语言。
它具有良好的可读性和扩展性,被广泛应用于Web开发、数据交换和配置文件等领域。
在读写和处理XML数据时,有许多方法可供选择。
本文将介绍四种常见的读写XML的方法:DOM、SAX、JDOM、和XMLStreamReader/XMLStreamWriter。
1. DOM(Document Object Model):DOM是一种基于树形结构的解析器,它将整个XML文档加载到内存中,并将其表示为一个对象树。
在DOM中,每个XML元素都被表示为一个节点(Node),可以通过节点的属性和方法对其进行操作。
读取XML文档时,可以使用DOM解析器将其转换为一个DOM树,然后通过节点的方法访问和修改树结构。
写入XML文档时,可以通过创建和修改节点来构建DOM树,并使用DOM解析器将其保存为XML文档。
使用DOM读取XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象解析XML文档,并返回一个Document对象。
- 通过Document对象的方法遍历和操作XML文档的节点。
使用DOM写入XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象创建一个Document对象。
- 通过Document对象的方法创建和添加元素节点、属性节点等。
- 使用TransformerFactory和Transformer对象将Document对象保存为XML文档。
DOM的优点是易于使用和理解,可以方便地遍历和修改XML文档。
xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。
在处理XML文件时,解析是必不可少的环节。
本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。
一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。
DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。
DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。
1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。
2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。
3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。
4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。
二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。
在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。
相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。
1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。
2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。
XML的解析器原理及性能比较,SAX详解1 DOMDOM 是用与平台和语言无关的方式表示XML 文档的官方W3C 标准。
DOM 是以层次结构组织的节点或信息片断的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。
由于它是基于信息层次的,因而DOM 被认为是基于树或基于对象的。
DOM 以及广义的基于树的处理具有几个优点。
首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。
它还可以在任何时候在树中上下导航,而不是像SAX 那样是一次性的处理。
DOM 使用起来也要简单得多。
另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。
这些基于事件的模型,比如SAX。
2 SAX这种处理的优点非常类似于流媒体的优点。
分析能够立即开始,而不是等待所有的数据被处理。
而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于大型文档来说是个巨大的优点。
事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。
一般来说,SAX 还比它的替代者DOM 快许多。
3 选择DOM 还是选择SAX ?对于需要自己编写代码来处理XML 文档的开发人员来说,选择DOM 还是SAX 解析模型是一个非常重要的设计决策。
DOM 采用建立树形结构的方式访问XML 文档,而SAX 采用的事件模型。
DOM 解析器把XML 文档转化为一个包含其内容的树,并可以对树进行遍历。
用DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。
可以很容易的添加和修改树中的元素。
然而由于使用DOM 解析器的时候需要处理整个XML 文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML 文件的时候。
由于它的遍历能力,DOM 解析器常用于XML 文档需要频繁的改变的服务中。
c解析xml常用方法解析XML是指将XML文档中的数据提取与分析的过程。
XML是一种标记语言,用于描述数据的结构与内容。
常用的XML解析方法包括DOM、SAX和StAX。
DOM解析:DOM(Document Object Model)是一种将XML文档表示为文档树的解析方法。
DOM解析将整个XML文档加载到内存中,并构建一个树形结构,可以方便地对XML文档进行遍历和操作。
常用的DOM解析类包括DocumentBuilder和Document类。
1.创建DOM解析器:```javaDocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(;DocumentBuilder builder = factory.newDocumentBuilder(;```2.加载XML文档:```javaDocument document = builder.parse(new File("file.xml")); //通过文件Document document = builder.parse(inputStream); //通过输入流Document document = builder.parse(url); //通过URL```3.获取根节点:```javaElement rootElement = document.getDocumentElement(;```4.遍历子节点:```javaNodeList nodeList = rootElement.getChildNodes(;for (int i = 0; i < nodeList.getLength(; i++)Node node = nodeList.item(i);if (node.getNodeType( == Node.ELEMENT_NODE)Element element = (Element) node;//处理子节点}```SAX解析:SAX(Simple API for XML)是一种基于事件驱动的解析方法。
java xml格式返回报文解析Java中可以使用多种方式解析XML格式的返回报文,常见的方式有DOM解析、SAX解析以及基于XML绑定技术的解析。
每种方式都有不同的特点和适用场景,下面将详细介绍这三种解析方式。
1. DOM解析:DOM(Document Object Model)解析是将整个XML文档加载到内存中,构建成一个树形结构,并提供API来操作这个树。
DOM解析提供了许多API,可以通过节点遍历和搜索、属性读取和设置、节点创建和删除等方式来处理XML文档。
DOM解析适用于对XML文档进行多次读写操作,如增删改查等复杂的操作。
使用Java的DOM解析,可以通过以下几个步骤实现:1)使用DocumentBuilderFactory创建一个DocumentBuilder对象。
2)调用DocumentBuilder的parse方法,传入XML文件的输入流,将XML文档解析为一个Document对象。
3)通过Document对象可以获取XML文档的根元素,从而开始对XML文档进行遍历和操作。
DOM解析的优点是能够将整个XML文档加载到内存中,便于操作和修改。
但是对于较大的XML文件,DOM解析会消耗大量的内存空间。
2. SAX解析:SAX(Simple API for XML)解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发相应的事件,应用程序根据事件的发生来处理XML文档。
SAX解析的特点是速度快、内存消耗小,适用于对XML文档进行单次顺序读取的操作。
使用Java的SAX解析,可以通过以下几个步骤实现:1)定义一个继承自DefaultHandler的处理器类,重写相应的事件回调方法。
2)使用SAXParserFactory创建一个SAXParser对象。
3)调用SAXParser的parse方法,传入XML文件的输入流和处理器对象,开始解析XML文档。
SAX解析的优点是速度快,内存消耗小,适用于大型XML文件的解析。
XML的四种解析器原理及性能比较XML(可扩展标记语言)是一种非常常见的数据交换格式,用于在应用程序之间传递和存储数据。
在处理XML数据时,需要使用解析器来读取和解析XML文档。
下面将介绍XML的四种解析器的原理和性能比较。
1. DOM解析器(Document Object Model Parser):DOM解析器将整个XML文档加载到内存中,并将其表示为一个树形结构,每个节点都对应XML文档中的一个元素或属性。
解析器可以通过遍历这个树形结构来访问和操作XML数据。
由于将整个文档加载到内存中,DOM解析器所需的内存较大,适合处理比较小的XML文档。
虽然性能较差,但它提供了灵活的访问和操作XML数据的方法。
2. SAX解析器(Simple API for XML Parser):3. StAX解析器(Streaming API for XML Parser):StAX解析器是一种混合了DOM和SAX解析器的解析器,它允许开发人员以推拉模型访问XML数据。
开发人员可以使用迭代器的形式遍历XML文档,并根据需要拉取或推送事件。
StAX解析器的内存需求较低,同时也具备灵活的操作XML数据的能力。
4. JAXB解析器(Java Architecture for XML Binding):JAXB解析器是一种用于将XML数据绑定到Java对象的解析器。
它可以将XML文档中的元素和属性映射到具体的Java类和对象上,并提供了将Java对象序列化为XML的能力。
相比于前三种解析器,JAXB解析器需要定义Java类和XML的映射关系,稍微复杂一些。
但它提供了方便的对象操作方式,可以更加简洁地处理XML数据。
对于解析性能的比较,DOM解析器的性能最差,因为它需要将整个XML文档加载到内存中。
对于大型XML文档,DOM解析器可能会导致内存不足的问题。
SAX解析器和StAX解析器的性能较好,因为它们是基于事件驱动的解析器,可以逐行读取XML文档,无需将整个文档加载到内存中。
XML SAX处理开始和结束标记在解析器解析XML文档时,如果发现了开始标记,就会触发“开始标记”事件,并向事件处理器发送一个“开始标记”事件报告。
事件处理器获得发送的事件处理发现的数据,每个参数的详细信息如下所示:●uri参数表示名称空间URI,如果元素(标记)没有任何名称空间URI,或者没有正在执行名称空间处理,则为空字符串。
●localName参数表示本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
●qName参数表示限定的名称(带有前缀)或标记名称(如果没有名称空间的前缀),如果限定的名称不可用,则为空字符串。
●attributes参数表示附加到元素的属性。
如果没有属性,则它将是空的Attributes对象,依靠这个参数可以获得相应的标记的属性的名称,属性的值。
事件处理器执行完该方法后,就会执行其他的事件,如“文本事件”,子标记的“标记开始”事件等。
由于XML标记一定有相应的结束标记,对同一个标记来说,解析器报告完后“开始标记事件”后,一定会报告“结束标记事件”。
事件处理器接到该报告后,就会调用:方法处理结束时的数据。
该方法具有的参数和前面的startElement方法具有相同的含义。
现在创建一个案例,演示SAX处理开始标记和结束标记事件。
首先创建XML将上述代码保存,名称为Example4.xml。
创建解析XML文档Java程序,打开行该文件,会显示如图7-5所示窗口:图7-5 SAX处理开始标记和结束标记如果要SAX解析的XML文档带有名称空间,在创建解析器工厂的时候,应通过“factory.setNamespaceAware(true);”语句设定该工厂支持名称空间,如果要获得该名称空间可以通过参数uri。
获取标记的属性值,需通过atts参数,以循环的方式显示标记的属性名称及属性值。
在事件处理器MyHandler中,startElement方法处理开始标记事件。
在该方法中,使用“count++”语句计算开始标记的个数,如果uri的长度大于零,即该标记存在名称空间,则输出。
三种解析XML文件的方法在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。
下面是本例子要解析的XML文件:文件名称:china.xml例子定义了一个javabean用于存放上面解析出来的xml内容,这个javabean为Person,代码:使用SAX读取XML文件SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。
SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。
所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。
下面是一些ContentHandler接口常用的方法:startDocument()当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
endDocument()和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。
startElement(String namespaceURI, String localName, String qName, Attributes atts) 当读到一个开始标签的时候,会触发这个方法。
namespaceURI就是命名空间,localName 是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。
通过atts可以得到所有的属性名和相应的值。
要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。
SAX解析XMLsax解析特点:1、逐⾏读取2、事件处理-- ⽅法3、解析器调⽤相应的事件 4、只能读取⽂件DefaultHandler 可以触发5个事件*startDocument() 开始⽂档*startElement() 开始元素*characters() ⽂本*endElement() 结束元素*endDocument() 结束⽂档在startElement/*** 如果xml⽂件使⽤了schema约束 <xs:element>* * uri:schema -- targetNameSpace* * localName--element* * qName---xs:element* 如果不使⽤* * uri:null* * localName:null* * qName : element** Attributes:当前元素的所有的属性的集合*/1//获得解析⼯⼚实例2 SAXParserFactory factory=SAXParserFactory.newInstance();3//获得解析器4 SAXParser parser=factory.newSAXParser();5//解析xml6 DefaultHandler dh=new MyDefaultHandler();78 parser.parse("books.xml", dh);Demo1public void SaxDemo() throws Exception2 {3 SAXParser parser= SAXParserFactory.newInstance().newSAXParser();4 parser.parse(Demo.class.getClassLoader().getResourceAsStream("users.xml"), new DefaultHandler(){ 5private boolean nameOrAge=false;6 @Override7public void startElement(String uri, String localName,8 String qName, Attributes attributes) throws SAXException {9if(qName.equals("user"))10 {11 System.err.println(attributes.getValue("id"));12 }13else if(qName.equals("name") || qName.equals("age")){14 nameOrAge=true;15 }16 }1718 @Override19public void endElement(String uri, String localName, String qName)20throws SAXException {21if(qName.equals("name")|| qName.equals("age"))22 {23 nameOrAge=false;24 }25 }2627 @Override28public void characters(char[] ch, int start, int length) 29throws SAXException {30if(nameOrAge)31 {32 String value=new String(ch,start,length);33 System.err.println(value);34 }35 }3637 });38 }。
解析xml格式字符串标签数据的方法XML格式字符串是一种常用的数据格式,它可以表示复杂的数据结构。
在处理XML格式字符串时,我们需要解析其中的标签数据,才能获取其中的内容。
下面是几种解析XML格式字符串标签数据的方法: 1. DOM解析:DOM是Document Object Model的缩写,它将XML 数据组织成一个树形结构,可以通过操作节点对象来访问和修改数据。
使用DOM解析XML格式字符串需要加载完整的XML文档到内存中,因此适合处理较小的XML数据,但对于大型XML数据,DOM解析可能会导致性能问题。
2. SAX解析:SAX是Simple API for XML的缩写,它是一种基于事件驱动的解析方式,可以在读取XML数据时逐个处理数据。
SAX解析对内存的要求非常低,适合处理大型XML数据,但由于它是基于事件驱动的,因此需要编写复杂的回调函数来处理数据。
3. XPath解析:XPath是一种查询语言,可以通过路径表达式来访问XML数据中的元素、属性等。
使用XPath解析XML格式字符串时,可以通过XPath表达式来获取特定的元素或属性的值,非常方便。
不过,XPath解析需要加载完整的XML文档到内存中,对于大型XML数据仍然存在性能问题。
4. XML解析器:除了DOM、SAX和XPath解析之外,还有一些XML 解析器可以用来解析XML格式字符串。
例如,Python中的ElementTree 模块提供了一种简单的解析方式,可以快速地访问和修改XML数据。
总之,在解析XML格式字符串时,需要根据实际的需求选择合适的解析方式。
如果对内存要求比较高,可以使用SAX解析;如果需要快速访问和修改XML数据,可以考虑使用XPath解析或XML解析器。
SAX解析器创建及使用SAX接口提供了解析XML文件的API,基于SAX接口的解析器这里我们称作SAX解析器。
和DOM解析不同的是,SAX解析器不在内存中建立和XML文件相对应的树状结构数据。
SAX解析器的核心是事件处理机制。
1.SAX创建步骤使用SAX解析器的步骤如下:(1)使用javax.xml.parsers包中的SAXParserFactory类调用该类的方法newIn这里我们可以把它称为SAX解析器。
该解析器工厂和解析器对象主要针对SAX接Handler类型,解析器调用parse方法时,必须向dh传递一个DefaultHandler类或子类的对象,DefaultHandler类是org.xml.sax.helpers包中的类,该类或其子类的对象称作解析器的事件处理器。
SAX解析器调用parse方法解析XML文件的过程中,根据从XML文件解析出的数据产生相应的事件,并报告给事件处理器,事件处理器就会处理发现的数据。
DefaultHandler类实现了ContentHandler、DTDHandler、E ntityResolver和ErrorHandler接口的类,也就是说,DefaultHandler定义了事件处理器根据相应事件应该调用的方法,比如,解析器发现一个标记的开始标记时,就将所发现的数据封装为一个“标记开始事件”,并报告该事件处理器,事件处理器就方法对发现的数据处理。
方法中的参数atts是解析器发现的标记的全部属性,参数uri就是解析器发现的标记的名称空间,localName是标记的名称,qName是带名称空间前缀的标记名称或标记的名称。
如果标记没有名称空间,uri值为null。
当SAX解析器调用parse方法解析XML文件时,事件处理器会根据所产生的事件调用相应的方法来处理发现的数据。
在编写程序时,需要使用DefaultHandler 类的子类创建一个事件处理器,当处理器对报告的事件不感兴趣时,就直接调用父类继承的方法,采用默认的处理方式(父类的方法没有具体的处理语句),当处理器对报告的事件感兴趣时,之类就可以重写父类的某些方法,调用重写的方法,以便处理器可以具体的处理解析器报告的数据。
一:SAX 解析:SAX (Simple API for XML )解析二:优缺点:优点:不用实现调入整个文档,占用资源少,尤其在嵌入式环境中,如Android缺点:DOM 解析将文档长期驻留在内存中数据是持久的SAX 解析如果事件过后没有保存数据,数据就会丢失。
特点:不能对文档进行修改,只能读取。
三:SAX 解析小引:SAX 采用事件驱动模型的方式解析XML 文件,利用SAX 解析XML 文档,涉及两个部分:解析器和事件处理器解析器:用于解析某个XML 文档事件处理器:针对事件做出响应的对象,得到SAX 解析器解析的数据,事件驱动模型:将XML 、文档转换成一系列的事件由具体单独的事件处理具体的数据 四:SAX 解析的工作原理图:五:SAX 解析流程1:使用SAXParserFactory 创建SAX 解析工厂获取对象SAXParserFactory spf=SAXParserFactory.newLnstance ()2:通过SAX 解析工厂获得解析器的对象SAXparser sp= spf.newParser ();3:通过解析器对象得到一个XML 兑取器对象XMLReader. xmlReader=sp.getXMLReader();4:设置读取器的事件处理器xmlReader.setContentHanler(new ContenHandler());5:解析XML 文件XMlREader.parse(“book.xml ”);六:事件处理器:ContentHandler 、和 DefaultHandler事件处理器ContentHandler 是一个接口定义一个类实现一个这个接口就可以了,里面有非常多的方法,但是目前能够用到的也就三个分别是startElement():读取到文档开始节点的时候调用例如《书架》参数:url:读取的路径localName:节点的名字qName:也是节点名字区别是前者不带后缀名,后者带后缀名atts:属性characters():读取到节点的内容时调用。
MySAX.java
package org.lxh.xml.sax;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class MySAX extends DefaultHandler{
public void startDocument()throws SAXException{
System.out.println("<?xml version=\"1.0\" encoding=\"GBK\" ?>");
}
public void startElement(String uri,
String localName,
String qName,
Attributes attributes)
throws SAXException{
System.out.print("<");
System.out.print(qName);
if(attributes != null){//如果存在了属性
for(int x = 0;x<attributes.getLength();x++){
System.out.print(" " + attributes.getQName(x) + "=" + attributes.getV alue(x));
}
}
System.out.print(">");
}
public void endElement(String uri,
String localName,
String qName)
throws SAXException{
System.out.print("<");
System.out.print(qName);
System.out.print(">");
}
public void characters(char[] ch,
int start,
int length)
throws SAXException{
System.out.print(new String(ch,start,length));
}
public void endDocument()
throws SAXException{
System.out.println("文档结束了...");
}
}
TestSAX.java
package org.lxh.xml.sax;
import java.io.*;
import javax.xml.parsers.*;
public class TestSAX{
public static void main(String args[]) throws Exception{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse("d:" + File.separator + "XMLSAX.xml",new MySAX());
}
}
XMLSAX.xml
<?xml version="1.0" encoding="gbk"?>
<addresslist>
<linkman id="lxh">
<name value = "04" name = "B031">闪电科技</name>
<email>shandian@</email>
</linkman>
<linkman id = "lxh">
<name value = "07" name = "b0932">头包了铁</name>
<email>toubaoletie@</email>
</linkman>
</addresslist>。