SAX解析XML
来源:互联网 发布:java子类继承父类属性 编辑:程序博客网 时间:2024/06/11 15:35
DOM和SAX解析的区别:
由于DOM方式在解析文档时,需要首先将整个XML 文档装载进内存,如果文档特别大,就会消耗计算机的大量内存,甚至导致内存溢出。
Sax方式在解析xml时无需加载整个文档
它允许解析器在读取文档的同时就对文档进行处理,而不必等到整个文档装载完才会文档进行操作。
Sax是以事件处理的方式对xml文档进行解析的,主要有两个核心对象: 解析器对象 和 处理器对象
解析器负责对文档进行解析,当解析到xml文档的某个组成部分,就会根据类型调用处理器对象相对应方法
EntityResolver, DTDHandler, ContentHandler, ErrorHandler这四个是接口!当触发什么事件就会调用相对应 的触发器!
使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
通过解析器对象得到一个XML的读取器
XMLReader xmlReader = sp.getXMLReader();
设置读取器的事件处理器
xmlReader.setContentHandler(new BookParserHandler());
解析xml文件
xmlReader.parse("book.xml");
/**sax解析
* @throws Exception
* @throws ParserConfigurationException
*/
public static void main(String[] args) throws ParserConfigurationException, Exception {
//1.得到sax解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2.得到sax解析器
SAXParser parser = factory.newSAXParser();
//3.得到xml读取器
XMLReader reader = parser.getXMLReader();
//4.注入事件处理器
reader.setContentHandler(new MyContentHandler1());
//5.开始解析xml文档
reader.parse("src/book.xml");
}
//获取整个xml文档的内容
class MyContentHandler implements ContentHandler{
// 解析到文档开始标签时调用,name—标签名
public void startElement(String uri, String localName, String name,
Attributes atts) throws SAXException {
System.out.println("<" + name + ">");
for(int i=0;i<atts.getLength();i++){
String attName = atts.getQName(i);
String attValue = atts.getValue(i);
System.out.println(attName + "=" + attValue);
}
}
// 解析到结束标签时调用,name标签名
public void endElement(String uri, String localName, String name)
throws SAXException {
System.out.println("</" + name + ">");
}
// 解析到内容时调用,会将内容放在一个字符数组里传给这个方法,并告诉我们解析的内容会放在字符数组 的什么位置。
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch,start,length));
}
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
}
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub
}
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
}
public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub
}
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub
}
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub
}
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub
}
}
- [XML] SAX解析XML
- 【XML】SAX解析XML
- XML解析(SAX解析)
- XML解析:SAX解析
- Study SAX《SAX解析XML》
- 使用SAX解析XML
- 解析xml之--SAX
- SAX解析XML
- SAX解析XML
- xml文件解析-SAX
- 解析xml之--SAX
- 解析xml之--SAX
- 使用SAX解析XML
- XML学习《SAX解析》
- SAX解析XML例子
- java sax 解析 xml
- 使用SAX解析XML
- sax解析xml实例
- json
- CRC原理及其逆向破解方法
- Issues for Set up an on-premises development environment for apps for SharePoint 2013 Preview
- 关于C Conception
- jsp课程(3)---out隐式对象,pageContext对象
- SAX解析XML
- 爬虫遍历中图分类法
- c++动态绑定
- 关于stm32的jtag和sw模式
- SQL Server 2008“阻止保存要求重新创建表的更改”
- MIPS系统 core dump 调试
- 用C/C++创建windows服务程序
- codeforces 242C
- eclipse 导入工程时出现乱码的解决方法