带DTD 的XML 用SAX进行解析
来源:互联网 发布:贝尔狂虐伊莲娜 知乎 编辑:程序博客网 时间:2024/06/05 10:05
我们知道,在java中,解析的xml文件的插件很多,dom4j,jdom等等,但是它们都是基于dom和sax两种形式就行解析的,我们明白,dom是解析小文件的,一次性的把文件加载到内存中进行解析,sax是分步进行的,只有用到的时候,才会到硬盘上去加载xml文件,适合大文件xml解析,下面我们就来书写一下sax对xml的解析例子。
使用过sax解析xml的朋友都知道,它需要指明一个处理类来进行xml的解析处理,为了方便,就可以直接把处理类和解析类放入同一个类中来进行
package test;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.util.Stack;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;public class SAXParse extends DefaultHandler {private Stack<InputStream> stack = new Stack<InputStream>();public void parse(String path) throws ParserConfigurationException, SAXException, IOException{SAXParserFactory parserFactory = SAXParserFactory.newInstance();parserFactory.setValidating(true);SAXParser parser = parserFactory.newSAXParser();InputStream is = SAXParse.class.getClassLoader().getResourceAsStream(path);if(is.available() > 0){stack.push(is);}URL url = SAXParse.class.getClassLoader().getResource(path);File file = new File(url.getFile());parser.parse(is, this,file.getAbsolutePath());}public void endDocument() throws SAXException {if(!stack.empty()){InputStream is = stack.pop();if(is != null){try {is.close();} catch (IOException e) {e.printStackTrace();throw new SAXException(e.getMessage());}}}}public void startDocument() throws SAXException {}public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {System.out.print("<"+name+" ");for(int i = 0 ; i < attributes.getLength() ; i++){String qname = attributes.getQName(i);String value = attributes.getValue(i);System.out.print(qname+"=\""+value+"\" ");}System.out.println("></"+name+">");}public static void main(String[] args){SAXParse p = new SAXParse();try {p.parse("test/test.xml");} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
dtd文件,保存为test.dtd,和test.xml保存到同一个目录下面
<?xml version="1.0" encoding="UTF-8"?><!ELEMENT root (person*)><!ELEMENT person (baby*)><!ATTLIST person idcard ID #REQUIRED><!ATTLIST person name CDATA #REQUIRED><!ATTLIST person sex (1|0|F|M) "f"><!ATTLIST person remark CDATA ""><!ATTLIST baby name CDATA #REQUIRED><!ATTLIST baby age CDATA "0"><!ATTLIST baby sex (1|0|F|M) "f">
xml文件test.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root SYSTEM "test.dtd" ><root><person idcard="1234567890" name="张三" remark="remark" sex="1"><baby name="大儿子" age="2" sex="M" /><baby name="二女儿" age="1" sex="F" /></person></root>
- 带DTD 的XML 用SAX进行解析
- SAX解析xml带冒号
- xml、dtd、SAX解析、DOM解析、DOM4J解析学习
- xml解析请求DTD错误的解决办法(断网服务器下):org.xml.sax.SAXParseExceptionpublicId
- SAX方式进行XML解析
- sax方法进行xml解析
- xml的sax解析
- xml的sax解析
- xml的SAX解析
- XMl的SAX解析
- XML基本概念解析(一) SAX、DOM、DTD和Schema
- XML基本概念解析(一) SAX、DOM、DTD和Schema
- 利用JAXP的SAX方式对xml进行解析
- 用sax解析xml
- 用SAX解析XML
- lucene-用SAX API进行XML解析并索引
- 用SAX解析xml文件的例子
- 用SAX解析XML的例子
- event-B
- Android案例之拨打电话
- windows服务安装程序中如何安装后自动启动
- 最近学习计划
- flex_将数据保存到本地文件;
- 带DTD 的XML 用SAX进行解析
- 揭开应用推广运营背后的秘密
- vb commondialog 如何设置初始化路径啊?
- android 自定义折线图
- 看看牛人们是怎么评价编程语言的
- ImageSource的使用心得
- C #define中的 "\,#,## #@"
- ubuntu11.10 ssh密钥对登录
- DirectX9 SDK Samples(22) ParallaxOcclusionMapping