XML解析之一—— DOM解析和SAX解析
发布时间:2020-12-16 05:27:25 所属栏目:百科 来源:网络整理
导读:XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。 SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。 Dom解析 原理: DOM解析
XML解析方式分为两种:DOM方式和SAX方式 Dom解析原理:DOM解析是把整个XML文档当成一个对象来处理,会先把整个文档读入到内存里,构造成DOM树,然后直接以树的形式来操作。 //创建DOM解析器工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //创建DOM解析器 DocumentBuilder documentBuilder = factory.newDocumentBuilder(); //解析XML文档,获得该XML文档对应的Document对象 Document document = documentBuilder.parse(inputStream); SAX解析原理:SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。 SAX 解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件 Start document Start element (config) Characters (whitespace) Start element (server) Characters (UNIX) End element (server) Characters (whitespace) End element (config) End document 发生相应事件时,将调用一个回调方法 //使用SAXParserFactory创建SAX解析工厂 SAXParserFactory spf = SAXParserFactory.newInstance(); //通过SAX解析工厂得到解析器对象 SAXParser sp = spf.newSAXParser(); //通过解析器对象解析xml文件 xmlReader.parse("book.xml“,new XMLContentHandler());这里的XMLContentHandler 继承 DefaultHandler public class XMLContentHandler extends DefaultHandler { // 当前元素中的数据 private String currentData; // 取得元素数据 public void characters(char[] ch,int start,int length) throws SAXException { currentData = new String(ch,start,length); } // 在解析整个文档结束时调用 public void endDocument() throws SAXException { System.out.println("结束文档"); } // 在解析元素结束时调用 public void endElement(String uri,String localName,String name) throws SAXException { System.out.println("节点数据 *************************" + this.currentData); System.out.println("结束元素 ************" + name); } // 在解析整个文档开始时调用 public void startDocument() throws SAXException { System.out.println("开始文档"); } // 在解析元素开始时调用 public void startElement(String uri,String name,Attributes attributes) throws SAXException { System.out.println("开始元素 ************" + name); } } Dom解析和SAX解析的区别SAX适于处理下面的问题: 1、对大型文件进行处理; 2、只需要文件夹的部分内容,或者只需从文件中得到特定信息。 3、想建立自己的对象模型的时候。 DOM适于处理下面的问题: 1、需要对文件进行修改; 2、需要随机对文件进行存取(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 介绍Flex4当中的视窗和滚动(Introduction to viewports an
- 正则表达式\d元字符(相对于数字0-9)
- ruby-on-rails – 高效的连接查询 – 可以使用ActiveRecord
- FlashCopy Manager: Oracle, Oracle with SAP Install Guid
- CWebBrowser2 create失败Debug版
- SQLite应用之路---CppSqlite
- reactjs – 在Redux中间件中使用React-intl转换的消息
- ruby – 在Sinatra中,提供iPhone布局与正常布局的最佳方式是
- 乱码
- 提升SQLite数据插入效率低、速度慢的方法