用SAX解析XML的例子
2008-12-07 13:34
381 查看
1. Xml技术简介
Xml文件有两种约束类型,包括文档类型定义(DTD)和Xml 模式(Schema)。Xml DTD被包含在xml1的标准里。Xml 模式被包含在W3C的标准中。在xml 数据和xml 模式两者之间有很多的区别。
A. xml模式支持的数据类型比xml DTD多;
B. xml模式在无序的情况下使用起来比xml DTD更方便;
C. xml模式支持名字空间,可以在不同的文件中定义相同的方法等。
D. xml模式形成的文档可以被多种标准解析,如dom,sax或者jdom等,而xml DTD方式下确不行。
2. Xml文件解析
在java语言环境里可以使用三种方法解析xml文件:dom(document object model),sax(simple api for xml)和jdom(java document object model)。
SAX提供了基于事件的方式进行解析,适合于快速,数据量小的解析情况。SAX解析有几个缺陷:A.它的解析是连续的;B.数据无法回朔。
DOM解析不同于SAX。它提供了内存中完整的xml数据映像,数据被存储在树状结构中。DOM解析方式更容易获得和处理数据。
JDOM是java语言中特有的,主要用来支持xpath标准。
3. SAX解析方式
上面我简要介绍了几种解析xml文件的技术,这里我们使用SAX技术给出一个小例子,大家可以从这个例子中发现如果你能够掌握一些开源软件包,你就可以很快掌握解析xml数据的技术。
3.1制作一个简单的xml文件component.xml
3.2下载xerces.jar软件包
在Apache网站上×××下载xerces.jar软件包,这个包中包含了上面我们列举的几种解析xml数据的API。然后将这个软件包加入到程序的classpath中。
3.3制作解析类MySaxParser.java
总结,虽然解析xml数据很复杂,因为涉及了很多的递归算法,但是我们可以使用业界比较成熟的解析API来进行xml数据处理。我现在只是给出了一个非常简单的例子,但是在真实系统中远比这个要复杂的多,大家以后在使用的使用会发现还是有很多的工作要做的。
Xml文件有两种约束类型,包括文档类型定义(DTD)和Xml 模式(Schema)。Xml DTD被包含在xml1的标准里。Xml 模式被包含在W3C的标准中。在xml 数据和xml 模式两者之间有很多的区别。
A. xml模式支持的数据类型比xml DTD多;
B. xml模式在无序的情况下使用起来比xml DTD更方便;
C. xml模式支持名字空间,可以在不同的文件中定义相同的方法等。
D. xml模式形成的文档可以被多种标准解析,如dom,sax或者jdom等,而xml DTD方式下确不行。
2. Xml文件解析
在java语言环境里可以使用三种方法解析xml文件:dom(document object model),sax(simple api for xml)和jdom(java document object model)。
SAX提供了基于事件的方式进行解析,适合于快速,数据量小的解析情况。SAX解析有几个缺陷:A.它的解析是连续的;B.数据无法回朔。
DOM解析不同于SAX。它提供了内存中完整的xml数据映像,数据被存储在树状结构中。DOM解析方式更容易获得和处理数据。
JDOM是java语言中特有的,主要用来支持xpath标准。
3. SAX解析方式
上面我简要介绍了几种解析xml文件的技术,这里我们使用SAX技术给出一个小例子,大家可以从这个例子中发现如果你能够掌握一些开源软件包,你就可以很快掌握解析xml数据的技术。
3.1制作一个简单的xml文件component.xml
<?xml version="1.0"?> <XmlComponents> <XmlComponent> <ComNo>1</ComNo> </XmlComponent> </XmlComponents>
3.2下载xerces.jar软件包
在Apache网站上×××下载xerces.jar软件包,这个包中包含了上面我们列举的几种解析xml数据的API。然后将这个软件包加入到程序的classpath中。
3.3制作解析类MySaxParser.java
import java.io.IOException; import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; public class MySaxParser extends DefaultHandler { private static int INDENT = 2; // 运行主方法 public static void main(String[] argv) { // if (argv.length != 1) { // System.out.println("Usage: java ds.MySaxParser [URI]"); // System.exit(0); // } System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl"); // String uri = argv[0]; String uri = "Components.xml"; try { SAXParserFactory parserFactory = SAXParserFactory.newInstance(); parserFactory.setValidating(false); parserFactory.setNamespaceAware(false); MySaxParser MySaxParserInstance = new MySaxParser(); SAXParser parser = parserFactory.newSAXParser(); parser.parse(uri, MySaxParserInstance); } catch(IOException ex) { ex.printStackTrace(); } catch(SAXException ex) { ex.printStackTrace(); } catch(ParserConfigurationException ex) { ex.printStackTrace(); } catch(FactoryConfigurationError ex) { ex.printStackTrace(); } } private int idx = 0; //indent // 处理各种分隔符号 public void characters(char[] ch, int start, int length) throws SAXException { //instantiates s, indents output, prints character values in element String s = new String(ch, start, length); if (!s.startsWith("/n")) //空的value不打印 System.out.println(getIndent()+ " Value: " + s); } // 处理文档尾 public void endDocument() throws SAXException { idx -= INDENT; System.out.println(getIndent() + "end document"); System.out.println("...PARSING ends"); } // 处理标记尾 public void endElement(String uri, String localName, String qName) throws SAXException { idx -= INDENT; } // 处理文档的起始点 public void startDocument() throws SAXException { idx += INDENT; System.out.println("PARSING begins..."); System.out.println(getIndent() + "start document: "); } // 处理标记头 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { idx += INDENT; System.out.println('/n' + getIndent() + "start element: " + qName); } private String getIndent() { StringBuffer sb = new StringBuffer(); for (int i = 0; i < idx; i++) sb.append(" "); return sb.toString(); } }
总结,虽然解析xml数据很复杂,因为涉及了很多的递归算法,但是我们可以使用业界比较成熟的解析API来进行xml数据处理。我现在只是给出了一个非常简单的例子,但是在真实系统中远比这个要复杂的多,大家以后在使用的使用会发现还是有很多的工作要做的。
相关文章推荐
- SAX解析XML例子
- sax(用于处理XML事件驱动的推模型)解析例子
- SAX解析xml 例子使用
- 一个android中使用sax解析xml的例子
- SAX解析XML例子
- SAX解析XML 简单例子
- SAX解析XML的例子.
- XML 解析--SAX
- sax和Dom解析xml文档 文档驱动和事件驱动
- java解析xml方法:DOM解析、SAX解析、JDOM解析、DOM4J解析
- jaxp利用Sax解析XML
- 【xml之SAX解析】
- Dom sax pull解析xml的差异
- Java解析XML(一)、SAX
- python xml解析例子
- xml解析-jaxp-sax方式
- org.xml.sax.SAXNotRecognizedException异常解析
- xml解析(sax java)
- 【Java】XML解析之SAX
- JAVA解析xml(SAX)