sax方式解析xml的优点:
只要有jdk的存在,严格意义上来说是jre,它就可以运行,不依赖任何第三方的jar包。在移动设备上尤为广泛使用。比如Android 就使用它来解析xml。当然Android更为推荐的是采用xmlpull来解析xml。这种方式也同样适合javase。我在后期会为大家准备使用xmlpull 解析xml的demo。敬请关注。
xml文件:
xml对应的Javabean:
package com.parsexml.entity;
public class Student {
private int id;
private int group;
private String name;
private String sex;
private int age;
private String email;
private String memo;
private String birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getGroup() {
return group;
}
public void setGroup(int group) { this.group = group;
}
public String getName() {
return name;
}
public void setName(String name) { https://www.doczj.com/doc/857612051.html, = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
开始解析:
package com.parsexml;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.parsexml.entity.Student;
/**
* 功能描述:采用sax方式解析XML
*
* @author sxyx2008
*
*/
public class SaxParseXml extends DefaultHandler{
//存放遍历集合
private List
//构建Student对象
private Student student;
//用来存放每次遍历后的元素名称(节点名称)
private String tagName;
public List
return list;
}
public void setList(List
this.list = list;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) { this.student = student;
}
public String getTagName() {
return tagName;
}
public void setTagName(String tagName) { this.tagName = tagName;
}
//只调用一次初始化list集合
@Override
public void startDocument() throws SAXException {
list=new ArrayList
}
//调用多次开始解析
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equals("student")){
student=new Student();
//获取student节点上的id属性值
student.setId(Integer.parseInt(attributes.getValue(0)));
//获取student节点上的group属性值
student.setGroup(Integer.parseInt(attributes.getValue(1))); }
this.tagName=qName;
}
//调用多次
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equals("student")){
this.list.add(this.student);
}
this.tagName=null;
}
//只调用一次
@Override
public void endDocument() throws SAXException {
}
//调用多次
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(this.tagName!=null){
String date=new String(ch,start,length);
if(this.tagName.equals("name")){
this.student.setName(date);
}
else if(this.tagName.equals("sex")){
this.student.setSex(date);
}
else if(this.tagName.equals("age")){
this.student.setAge(Integer.parseInt(date));
}
else if(this.tagName.equals("email")){
this.student.setEmail(date);
}
else if(this.tagName.equals("birthday")){
this.student.setBirthday(date);
}
else if(this.tagName.equals("memo")){
this.student.setMemo(date);
}
}
}
public static void main(String[] args) {
SAXParser parser = null;
try {
//构建SAXParser
parser = SAXParserFactory.newInstance().newSAXParser();
//实例化 DefaultHandler对象
SaxParseXml parseXml=new SaxParseXml();
//加载资源文件转化为一个输入流
InputStream stream=SaxParseXml.class.getClassLoader().getResourceAsStream("Student.xml");
//调用parse()方法
parser.parse(stream, parseXml);
//遍历结果
List
for(Student student:list){
System.out.println("id:"+student.getId()+"\tgroup:"+student.getGroup()+"\tname:"+student.getName() +"\tsex:"+student.getSex()+"\tage:"+student.getAge()+"\temail:"+student.getEmail()+"\tbirthday:"+student.getBirt hday()+"\tmemo:"+student.getMemo());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) { e.printStackTrace(); }
}
}
效果图:
一、什么是 XML? XML 被设计用来传输和存储数据。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。 准备一个解析用的xml如下:
所有的
) 4、XML 标签对大小写敏感 比如和是不一样的 5、XML 属性值必须加引号 < account name=laoz>这样会报错的,必须"laoz"才行 二、Python 对 XML 的解析 Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree。 DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点。SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件。 1、利用DOM解析XML 一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
1.详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。 而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM 还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM https://www.doczj.com/doc/857612051.html, JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102” 将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。 JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开
XML报文解析测试 在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 预备 测试环境: AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下测试。 XML 文件格式如下: <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> 测试方法: 采用 JSP 端调用Bean(至于为什么采用JSP来调用,请参考: https://www.doczj.com/doc/857612051.html,/rosen/archive/2004/10/15/138324.aspx),让每一种方案分别解析10K、100K、1000K、10000K的 XML 文件,计算其消耗时间(单位:毫秒)。 JSP 文件: <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="com.test.*"%> <html> <body> <% String args[]={""}; MyXMLReader.main(args); %>
一选择题 1.W3C的DOM核心定义(A)的最小集合 A.访问和操纵文档对象的接口 B.用XML解析器实现JA V A对象 C.创建“活的”HTML页面的惯例和过程 D.多个文档树 2.下面哪一个选项只包含Schema中的简单类型(D) A.anvURL.char,encoding,UTF-8 B.fullname,double,long,int C.TOKEN,timestamp,range,char D.byte,duration,ENTITY,NMTOKEN 3.对一个复杂结构的呈现时,使用元素而不使用属性的原因是因为 解析:属性取值只能为简单类型,不能包含子元素。 4.在下面XML文档解析过程中,有多少个各startElement 解析:有多少个元素就有多少个startELEMENT 5.下面的XML片断中,元素item1属于(B)名字空间
三种最流行的开放源码XML 库是expat、libxml 和Xerces。 第一部分:DOM解析: 概述:DOM解析将会把一个完整的XML文档读进来,生成一个结构树。这样会要把XML文档全部都加载到内在中。所以解析起来的速度会要慢一些。 1、如何加载xml文件: //创建DOM,加载XML文档 MSXML::IXMLDOMDocumentPtr pCommandDoc; pCommandDoc.CreateInstance(__uuidof(MSXML::DOMDocument)); pCommandDoc->put_async(V ARIANT_FALSE); pCommandDoc->put_validateOnParse(VARIANT_FALSE); pCommandDoc->put_resolveExternals(V ARIANT_FALSE); pCommandDoc->put_preserveWhiteSpace(V ARIANT_TRUE); pCommandDoc->load(file.GetBuffer(0)); 2、在XML文档中查找指定的结点: //找到 MSXML::IXMLDOMNodePtr pRootNode=pCommandDoc->selectSingleNode("root/record"); if (pRootNode==NULL) { return ; } 3、得到XML文档中,结点的属性 CString strTemp; MSXML::IXMLDOMNamedNodeMapPtr pAttrs = NULL; pRootNode->get_attributes(&pAttrs); if (pAttrs==NULL) { return; } MSXML::IXMLDOMNodePtr pRequestTypeAttr=pAttrs->getQualifiedItem("name",""); _bstr_t strRequestType=pRequestTypeAttr->Gettext(); strTemp=strRequestType.operator char *(); 4、得到结点的内容 _bstr_t strVisiPort=pNode->Gettext(); 5、设置结点的内容 HRESULT hr=pNode->put_text(_bstr_t(m_strGatewayPassword)); 6、设置一个属性内容 IXMLDOMAttribute *pa=NULL; bstr = SysAllocString(L"属性1"); pXMLDom->createAttribute(bstr,&pNode); var = VariantString(L"strin"); pa->put_value(var); pRoot->setAttributeNode(pa, &pa1); 第二部分、如何使用SAX解析
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(""); } 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
1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。DOM 采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然
后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM https://www.doczj.com/doc/857612051.html,/ JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。
这个是主类: import java.io.StringReader; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class ParsingXML extends Activity { private final String MY_DEBUG_TAG = "WeatherForcaster"; public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView tv = new TextView(this); String xml = "
XML解析方式介绍 1.DOM4J(Document Object Model for Java) 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。 为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。 在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java 开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。 DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J. 【优点】 ①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。 ②支持XPath。 ③有很好的性能。 【缺点】 ①大量使用了接口,API较为复杂。 2.SAX(Simple API for XML) SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX 采用的是事件模型。
SAX解析XML(自主判断) 实现方法一: ContentHandler接口:接收文档逻辑内容的通知的处理器接口 import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; class MyContentHandler implements ContentHandler{ StringBuffer jsonStringBuffer ; int frontBlankCount = 0; public MyContentHandler(){ jsonStringBuffer = new StringBuffer(); } /* * 接收字符数据的通知。 * 在DOM中ch[begin:end] 相当于Text节点的节点值(nodeV alue) */ @Override public void characters(char[] ch, int begin, int length) throws SAXException { StringBuffer buffer = new StringBuffer(); for(int i = begin ; i < begin+length ; i++){ switch(ch[i]){ case '\\':buffer.append("\\\\");break; case '\r':buffer.append("\\r");break; case '\n':buffer.append("\\n");break; case '\t':buffer.append("\\t");break; case '\"':buffer.append("\\\"");break; default : buffer.append(ch[i]); } } System.out.println(this.toBlankString(this.frontBlankCount)+ ">>> characters("+length+"): "+buffer.toString()); } /* * 接收文档的结尾的通知。 */ @Override public void endDocument() throws SAXException { System.out.println(this.toBlankString(--this.frontBlankCount)+ ">>> end document");
XML文件学习总结 掌握了XML文件解析的常用的4中方式:DOM解析、SAX 解析、STAX解析以及DOM4j解析XML文件。 一、DOM 解析xml文件 public List 在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB 1. DOM(Document Object Model) 此方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点。因此非常消耗系统性能,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在Java 语言中的应用不方便,并且可读性不强。 实例: Java代码 1.import javax.xml.parsers.*; 2.//XML解析器接口 3.import org.w3c.dom.*; 4.//XML的DOM实现 5.import org.apache.crimson.tree.XmlDocument; 6.//写XML文件要用到 7.DocumentBuilderFactory factory = DocumentBuilderFactory.newInst ance(); 8. //允许名字空间 9. factory.setNamespaceAware(true); 10. //允许验证 11. factory.setValidating(true); 12. //获得DocumentBuilder的一个实例 13.try { 14. DocumentBuilder builder = factory.newDocumentBuilder(); 15.} catch (ParserConfigurationException pce) { 16.System.err.println(pce); 17.// 出异常时输出异常信息,然后退出,下同 18.System.exit(1); 19.} 20.//解析文档,并获得一个Document实例。 21.try { 22.Document doc = builder.parse(fileURI); 23.} catch (DOMException dom) { 24.System.err.println(dom.getMessage()); 25.System.exit(1); 26.} catch (IOException ioe) { 27.System.err.println(ioe); 28.System.exit(1); 29.} SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是 W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。 常见的事件处理器有三种基本类型: ● 用于访问XML DTD内容的DTDHandler; ● 用于低级访问解析错误的ErrorHandler; ● 用于访问文档内容的ContentHandler,这也是最普遍使用的事件处理器。 图 2显示了SAX解析器如何通过一个回调机制报告事件。解析器读取输入文档并在处理文档时将每个事件推给文档处理器(MyContentHandler)。 与DOM相比,SAX解析器能提供更好的性能优势,它提供对XML文档内容的有效低级访问。SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。另外,你无需像在DOM中那样为所有节点创建对象。最后,SAX“推”模型可用于广播环境,能够同时注册多个ContentHandler,并行接收事件,而不是在一个管道中一个接一个地进行处理。 SAX的缺点是你必须实现多个事件处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为SAX解析器不能交流元信息,如DOM的父/子支持,所以你必须跟踪解析器处在文档层次的哪个位置。如此一来,你的文档越复杂,你的应用逻辑就越复杂。虽然没有必要一次将整个文档加载到内存中,但SAX解析器仍然需要解析整个文档,这点和DOM一样。 也许SAX面临的最大问题是它没有内置如XPath所提供的那些导航支持。再加上它的单遍解析,使它不能支持随机访问。这一限制也表现在名字空间上: 对有继承名字空间的元素不做注解。这些限制使SAX很少被用于操作或修改文档。 那些只需要单遍读取内容的应用程序可以从SAX解析中大大受益。很多B2B和EAI应用程序将XML用做封装格式,接收端用这种格式简单地接收所有数据。这就是SAX明显优于DOM的地方:因高效而获得高吞吐率。在SAX 2.0 中有一个内置的过滤机制,可以很轻松地输出一个文档子集或进行简单的文档转换。 xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J) 第一种:SAX解析 SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理。 测试用的xml文件:db.xml Xml代码 SAX解析实例一 org.xml.sax.DefalutHandler类: 可以扩展该类,给出自己的解析实现SAXPrinter.java Java代码 import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXPrinter extends DefaultHandler { /** *//** * 文档开始事件 */ public void startDocument() throws SAXException { System.out.println(""); xml文件被Sax解析器载入,由于Sax解析是按照xml文件的顺序来解析,当读入时,会调用startDocument()方法,当读入 2011-2012学年期末考试考试题 一、填空题(每题3分,共27分)请将每道题的正确答案填写在题目中的横线上,其余答题方式均无效。 1、下面代码中的“学生信息”是____根____元素; java读写xml文件的方法
SAX解析XML原理
xml的四种解析方法及源代码
Dom和SAX优缺点
SAX解析XML
xml期末考试试题,复习题修正版