XML解析之一—— DOM解析和SAX解析

前端之家收集整理的这篇文章主要介绍了XML解析之一—— DOM解析和SAX解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML解析方式分为两种:DOM方式和SAX方式
DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。

Dom解析

原理:
DOM解析是把整个XML文档当成一个对象来处理,会先把整个文档读入到内存里,构造成DOM树,然后直接以树的形式来操作。
  1. //创建DOM解析器工厂
  2. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  3. //创建DOM解析器
  4. DocumentBuilder documentBuilder = factory.newDocumentBuilder();
  5. //解析XML文档,获得该XML文档对应的Document对象
  6. 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

发生相应事件时,将调用一个回调方法
  1. //使用SAXParserFactory创建SAX解析工厂
  2. SAXParserFactory spf = SAXParserFactory.newInstance();
  3. //通过SAX解析工厂得到解析器对象
  4. SAXParser sp = spf.newSAXParser();
  5. //通过解析器对象解析xml文件
  6. xmlReader.parse("book.xml“,new XMLContentHandler());
这里的XMLContentHandler 继承 DefaultHandler
  1. public class XMLContentHandler extends DefaultHandler {
  2. // 当前元素中的数据
  3. private String currentData;
  4.  
  5. // 取得元素数据
  6. public void characters(char[] ch,int start,int length)
  7. throws SAXException {
  8. currentData = new String(ch,start,length);
  9. }
  10.  
  11. // 在解析整个文档结束时调用
  12. public void endDocument() throws SAXException {
  13. System.out.println("结束文档");
  14. }
  15.  
  16. // 在解析元素结束时调用
  17. public void endElement(String uri,String localName,String name)
  18. throws SAXException {
  19. System.out.println("节点数据 *************************" + this.currentData);
  20. System.out.println("结束元素 ************" + name);
  21. }
  22.  
  23. // 在解析整个文档开始时调用
  24. public void startDocument() throws SAXException {
  25. System.out.println("开始文档");
  26. }
  27.  
  28. // 在解析元素开始时调用
  29. public void startElement(String uri,String name,Attributes attributes) throws SAXException {
  30. System.out.println("开始元素 ************" + name);
  31. }
  32. }

Dom解析和SAX解析的区别

SAX适于处理下面的问题: 1、对大型文件进行处理; 2、只需要文件夹的部分内容,或者只需从文件中得到特定信息。 3、想建立自己的对象模型的时候。 DOM适于处理下面的问题: 1、需要对文件进行修改; 2、需要随机文件进行存取

猜你在找的XML相关文章