XML解析2(SAX)
来源:互联网 发布:淘宝到第三层级 编辑:程序博客网 时间:2024/06/04 19:10
sax (用于处理XML事件驱动的推模型)
SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势。
—————————-JAVA———————————-
1.创建工厂
//SAXParserFactory抽象类,新建一个有两种方式,1.新建抽象类的instance.2.新建抽象类的实现类
SAXParserFactory spf = SAXParserFactory.newInstance();SAXParserFactory spf = new SAXParserFactoryImpl();
2.创建解析对象
SAXParser sp = spf.newSAXParser();
3.解析器绑定处理器
重写这五个方法就可以开始解析
InputStream in = SaxTest.class.getClassLoader().getResourceAsStream("com/bigdata/BBTree/people.xml");sp.parse(in,/*解析事件1.匿名内部类*/new DefaultHandler(){ @Override public void startDocument() throws SAXException {} @Override public void endDocument() throws SAXException {} @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{} @Override public void endElement(String uri, String localName, String qName) throws SAXException {} @Override public void characters(char[] ch, int start, int length) throws SAXException {}
可设置个tag对象,在startElement方法里,接受qname对象,也就是标签,当碰到需要处理的标签时,在characters里面进行处理就好了,注意必须在endElement里将tag置为Null.
以解析name为例,tag=name,然后name标签处理完了之后,tag不重置的话,仍然为name,而characters会接着处理<\name>标签后的(\n以及空格),这就将会导致前面的数据丢失或者造成异常。
—————————-PYTHON———————————-
1.导包
import xml.sax
2.创建解析器
parse=xml.sax.make_parser()
3.定义事件处理类
class MyHandle(xml.sax.ContentHandler):def __init__(self): self.person=None self.tag=Nonedef startElement(self,name,attrs): self.tag=name if name =='person': self.person =Person()def endElement(self,name): if name=='person': global people people.append(self.person) self.person=None self.tag=Nonedef characters(self,content): if "name"==self.tag: self.person.name=content if "age"==self.tag: self.person.age=int(content) if "tel"==self.tag: self.person.tel=content
4.给解析器绑定事件处理器
parse.setContentHandler(MyHandle())
5.解析xml(JAVA不需要这一步)
parse.parse('people.xml')
码代码的过程中,发现idea全程都没有提示,myhandler类明明是继承的contenthandler,重写方法的时候也没有提示,很疑惑。不过倒是运行没有错误。
阅读全文
0 0
- SAX解析XML(2)
- XML解析2(SAX)
- xml 2 SAX解析
- xml解析(SAX)
- xml解析-2 SAX解析
- XML解析(一),SAX解析XML
- sax解析xml(转)
- SAX解析XML(源代码)
- SAX解析XML(源代码)
- xml解析(sax java)
- XML文件解析(SAX)
- XML解析(SAX详解)
- XML解析(SAX详解)
- SAX解析XML(1)
- SAX解析XML(入门)
- Xml解析(SAX & Pull)
- JAVA解析xml(SAX)
- [XML] SAX解析XML
- RN应用安装应用到真机报错
- PAT乙级1011. A+B和C (15)
- An ffmpeg and SDL Tutorial 学习笔记(四)
- SQL(高级查询)
- 收藏经典云计算blog---持续发现、持续更新
- XML解析2(SAX)
- Redis之集群原理和配置
- java线程同步,等待,2线程切换轮流执行 笔记
- 浅析FreeRTOS_v4.5.0延时机制---vTaskDelay()的实现
- java之File用法
- HTML5基础,第3部分:HTML5 API的威力
- Map Graticule——地图坐标网
- Renesas CS+ for ca cx入门(一)
- TensorFlow 1.0源码编译安装