SAX和DOM解析XML文档
来源:互联网 发布:linux lcd 设备文件 编辑:程序博客网 时间:2024/04/29 23:56
1.DOM(Document Object Model)文档对象模型-----核心(core)、Html、Xml
对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关,与平台无关的标准接口规范。
2. 要严格区分XML文档树中的根结点与根元素结点:
根节点(Document)代表的是XML文档本身,是我们解析XML文档的入口,而根元素结点则表示XML文档的根元素,它对应于XML文档的Root。
3. JAXP(Java API for XML Parsing):用于XML解析的Java API。
4. 对于XML解析器而言,空格不被忽略。
5. SAX(Simple APIs for XML)面向XML的简单API。
6. 使用DOM解析XML时,首先将XML文件加载到内存 中,然后通过随机的方式访问内存中的DOM树。
SAX是基于事件,而且是顺序执行的,一旦经过了某个元素,我们就不能再访问它了。
SAX不必事先将整个XML文档加载到内存中,因此它占据内存比DOM小,对于大型XML文档来说,通常会使用SAX而不是用DOM。
7.SAX也是使用的观察者模式
下面给出使用DOM和SAX解析XML的实例代码
a.使用SAX解析XML的实例
public class SaxParserStudent {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {SAXParserFactory apf = SAXParserFactory.newInstance();SAXParser saxParser = apf.newSAXParser();saxParser.parse(new File("doc/student.xml"),new MyHandler2());}}class MyHandler2 extends DefaultHandler{private String name;private String gender;private String age;Stack<String> stack = new Stack<String>();//SAX是基于事件,而且是顺序执行的,一旦经过了某个元素,我们就不能再访问它了,所以需要将解析的元素先放到stack中,当解析完毕后再从stack中取出。@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {stack.push(qName);for(int i = 0; i <attributes.getLength();i ++){String attribute = attributes.getQName(i);String attributeValue = attributes.getValue(i);System.out.println(attribute + ":" + attributeValue); }}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {String tag = stack.peek();if(("姓名").equals(tag)){name = new String(ch,start,length);}else if(("性别").equals(tag)){gender = new String(ch,start,length);}else if(("年龄").equals(tag)){age = new String(ch,start,length);}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {stack.pop();//表示该元素已经解析完毕,需要从栈中弹出if("姓名".equals(qName)){System.out.println("姓名:" + name);}else if("性别".equals(qName)){System.out.println("性别:" + gender);}else if("年龄".equals(qName)){System.out.println("年龄:" + age);System.out.println();}}}
b.使用DOM解析XML实例
public class DomParserCandidate {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { // step 1:获得DOM解析器工厂(用于创建具体的DOM解析器)DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//step 2:获得具体的DOM解析器DocumentBuilder db = dbf.newDocumentBuilder();//step 3:解析一个XML文档,获得Document对象。Document candidate = db.parse(new File("doc/candidate.xml"));NodeList persons = candidate.getElementsByTagName("PERSON");for(int i = 0; i < persons.getLength(); i++){Element nameElement = (Element) persons.item(i);String name = nameElement.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue();System.out.println("name:" + name );Element addressElement = (Element) persons.item(i);String address = addressElement.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue();System.out.println("address:" + address);Element telElement = (Element) persons.item(i);String tel = telElement.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue();System.out.println("tel:" + tel);Element faxElement = (Element) persons.item(i);String fax = faxElement.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue();System.out.println("fax:" + fax);Element emailElement = (Element) persons.item(i);String email = emailElement.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue();System.out.println("email:" + email);}}}
0 0
- DOM 解析和SAX解析 XML 文档
- 关于XML文档解析(DOM和SAX)
- SAX和DOM解析XML文档
- 利用DOM和SAX解析XML文档
- DOM、SAX解析xml文档
- SAX和DOM解析XML文档的区别
- 两种解析XML文档的方法-----DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- DOM和SAX解析xml文档--初学例子
- DOM和SAX解析XML文档区别及的优缺点
- XML文档的DOM和SAX解析方式详解
- sax和dom在解析xml文档时有什么区别
- 解析xml:DOM 和 SAX
- 树的直径学习小记 Poj 1985 Cow Marathon+Poj 2631 Roads in the North
- 项目经理需要的十项基本技能
- zigbee中profile,cluster的认识【转】
- 消息中心 NSNotificationCenter
- iphone导航条的显示与隐藏
- SAX和DOM解析XML文档
- sql插入某些固定数据和其他子查询结果
- 享元模式
- 一篇%3CDIV%20style%3D%22FONT-SIZE%
- Java反射学习总结二(用反射调用对象的私有属性和方法)
- 关于Images.xcassets
- hdu 3038 How Many Answers Are Wrong(并查集)
- Android开发之手机拍照功能的实现(源代码分享)
- Unable to open log device ‘/dev/log/main’: No such file or directory