sax2是The Simple API for xml的意思,是一种解析xml的方式。解析xml主要有二种方式,一个是dom,比较常用,解析完成以后再内存形成一个结构,另外一个方式就是一种事件解析方式,就是在解析到一定的内容抛出事件,继续向后处理,xml读取完成,也就解析完成,xml的内容并不存入内存。
Java API for XML Processing (JAXP) 对于xml解析进行了一层抽象,为了防止代码中混淆特定厂家的代码,jaxp对于xml的解析进行了抽象,他本身只是一个抽象层,不具有解析xml的能力,但是可以有第三方独立的机构进行代码的开发,这样的解析器很多,比如Sun的Crimson 还有apache的Xerces 等等
对于javax.xml.parsers下的类进行一个说明
DocumentBuilder
定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document
。
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder()
方法获取。获取此类的实例之后,将可以从各种输入源解析 XML。这些输入源为 InputStreams、Files、URL 和 SAX InputSources。
注意,此类重用了 SAX API 中的一些类。这并不要求底层 DOM 实现的实现者使用 SAX 解析器将 XML 文档解析为 Document
。它仅要求该实现使用这些现有的 API 与应用程序交流。
DocumentBuilderFactory
定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器
SAXParserFactory
定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档。
SAXParser
定义包装 XMLReader
实现类的 API。在 JAXP 1.0 中,此类包装 Parser
接口,但是此接口由 XMLReader
取代。为了便于过渡,此类继续支持相同的名称和接口,并支持新方法。 此类的实例可以从 SAXParserFactory.newSAXParser()
方法获得。获取此类的实例之后,将可以从各种输入源解析 XML。这些输入源为 InputStream、File、URL 和 SAX InputSource。
此静态方法根据系统属性设置创建新的工厂实例,如果未定义属性,则使用平台默认值。
控制创建哪个工厂实现的系统属性命名为 "javax.xml.parsers.SAXParserFactory"
。此属性命名一个类,该类为此抽象类的具体子类。如果未定义属性,将使用默认的平台。
由于内容由基础解析器解析,因此将调用给定 HandlerBase
或 DefaultHandler
的方法。
包装基础实现的此类的实现程序可以考虑使用 ParserAdapter
类,从而使其 SAX1 实现最初在此修订类下工作
其中包含了二个异常类
ParserConfigurationException
指示一个严重的配置错误。
FactoryConfigurationError
当解析器工厂的配置存在问题时抛出该异常。当找不到系统属性中指定的解析器工厂的类时,或者该类不能被实例化时,通常抛出此错误。
刚才说到jaxp里面都是一个抽象层,他都是依靠第三方的解析器进行的xml的解析,那么修改配置也成为一种必然需求,其实更改 JAXP 工厂类使用的解析器很容易。更改解析器实际上意味着更改解析器工厂,因为所有 SAXParser
和 DocumentBuilder
实例都来自这些工厂。工厂确定加载哪个解析器,所以必须更改工厂。要更改 SAXParserFactory
接口的实现,请设置 Java 系统特性 javax.xml.parsers.SAXParserFactory
。如果未定义此特性,则返回默认实现(不管开发商指定哪个解析器)。同一规则适用于所使用的 DocumentBuilderFactory
实现。在这种情况下,将会查询 javax.xml.parsers.DocumentBuilderFactory
系统特性。
sax的处理代码风格主要如下二种:
1.
// Get SAX Parser Factory
SAXParserFactory factory = SAXParserFactory.newInstance();
// Turn on validation, and turn off namespaces
factory.setValidating(true);
factory.setNamespaceAware(false);
SAXParser parser = factory.newSAXParser();
parser.parse(new File(args[0]), new MyHandler());
2.org.xml.sax.XMLReader parser = saxParser.getXMLReader();
// Use the underlying parser
parser.setContentHandler(myContentHandlerInstance);
parser.setErrorHandler(myErrorHandlerInstance);
parser.parse(new org.xml.sax.InputSource(args[0]));
分享到:
相关推荐
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
**SAX解析XML的基本原理:** SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而...
一个android小demo,采用SAX2方式解析xml。详细介绍请看: http://xiaxveliang.blog.163.com/blog/static/2970803420147784312563/
本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...
总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
最后,使用`saxParser.parse()`方法解析XML文件并传递我们的处理器。 在实际应用中,根据需求,你可能需要在处理器方法内进行更复杂的数据处理,例如存储数据、计算或验证。SAX解析器允许你在不消耗大量内存的情况...
以下是使用Servlet和SAX解析XML的基本步骤: 1. **创建Servlet**:首先,你需要创建一个Servlet类,继承HttpServlet,并重写doGet或doPost方法,因为XML解析通常发生在HTTP请求处理中。 2. **添加SAX解析器依赖**...
SAX解析XML的基本概念: 1. 事件驱动:SAX解析器在读取XML文档时,会触发一系列事件,如开始文档、结束文档、开始元素、结束元素等。应用程序通过实现SAX解析器的回调接口来响应这些事件。 2. 回调函数:当解析器...
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
在IT领域,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,尤其在处理结构化数据时非常常见。...而Xerces-C++库提供了方便的接口,使得在C++中使用SAX2解析XML文件变得简单易行。
"sax_xml sax_解析_xml"标签表明了本压缩包包含使用SAX解析XML的示例代码。 3. **JDOM**:JDOM是一个Java API,专门用于读写XML文档。它提供了一个更面向Java的对象模型,使得XML处理更加直观。JDOM在DOM的基础上...
2. 创建SAX解析器,通过`XMLReaderFactory.createXMLReader()`。 3. 实现`ContentHandler`接口,定义处理XML元素的方法。 4. 使用解析器解析XML流,调用`XMLReader.parse()`。 5. 如果涉及服务器端,可以使用Servlet...
标题“sax解析xml本地读取xml”指的是使用SAX解析器来读取和解析存储在本地文件系统中的XML文件。这种方式适用于处理那些无法一次性加载到内存中的大型XML文档,或者对于内存有限的环境。 SAX解析的基本工作原理...
总的来说,SAX解析XML是一种高效且灵活的方法,适用于处理大型XML文档。通过自定义事件处理器,我们可以根据业务需求定制解析逻辑,从而有效地解析和利用XML数据。在实际项目中,结合源码分析和工具使用,如IDE中的...
在使用SAX解析XML时,我们需要创建一个实现了SAX解析器接口的类,这个类会定义处理XML事件的方法,如`startDocument()`, `endDocument()`, `startElement()`, `endElement()`等。当解析器读到XML文档的相应部分时,...
以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...
本文将深入探讨如何使用SAX解析XML并获取元素的值或内容。 首先,SAX解析器以流式方式读取XML文档,当遇到文档的不同部分时,会触发相应的事件,如开始文档、开始元素、结束元素等。开发者可以注册事件处理器来响应...
通过以上步骤,我们就能使用SAX解析XML文档了。这种解析方式适用于处理大文件,因为它不会一次性加载整个XML文档到内存,而是按需逐行读取,从而节省内存资源。在实际项目中,可以根据需求定制ContentHandler来实现...