SAX解析XML文件

来源:互联网 发布:php时间戳转换成日期 编辑:程序博客网 时间:2024/04/28 08:29

 

XML(eXtended Markup Language,可扩展标记性语言)提供了一套跨平台,跨网络,跨程序的语言数据描述方式,使用XML可以方便地实现数据交换,系统配置,内容管理等常见功能。

使用SAX 解析XML文件,是顺序读入需要的文件内容,不受文件大小的限制,由于采用部分读取,只能对文件按从头到尾解析一遍,不支持文件的随意存取,只能读着xml文件的内容,但不能修改,当然,这种解析方式,在开发上比较复杂,需要自定义事件处理器,对于开发人员更加灵活,可以用sax建立对xml对象模型。

现在开始用代码来实现SAX解析的方法,如下:

XML文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/css" href="attrib.css"?>
  3. <addresslist>
  4. <linkman id="zlj">
  5. <name>xt</name>
  6. <email>xxxx@sina.com</email>
  7. </linkman>
  8. <linkman id="zs">
  9. <name>张三</name>
  10. <email>XXXXX@sina.com</email>
  11. </linkman>
  12. </addresslist>

首先要自定义一个SAX的XML解析器,代码如下:

  1. package com.etc.sax;
  2. import org.xml.sax.Attributes;
  3. import org.xml.sax.SAXException;
  4. import org.xml.sax.helpers.DefaultHandler;
  5. /**
  6. * 用sax来解析xml
  7. * sax 解析器
  8. * @author zhang lj
  9. *
  10. * 2012-12-19
  11. */
  12. public class MySax extends DefaultHandler{
  13. @Override
  14. public void startDocument() throws SAXException { //文档开始
  15. System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
  16. }
  17. @Override
  18. public void endDocument() throws SAXException {
  19. System.out.println("\n 文档读取结束 ............");
  20. }
  21. @Override
  22. public void startElement(String uri, String localName, String name,
  23. Attributes attributes) throws SAXException {
  24. System.out.print("<");
  25. System.out.print(name);
  26. if(attributes!=null){
  27. for(int i=0;i<attributes.getLength();i++){
  28. System.out.print(""+attributes.getQName(i)+"=\""+attributes.getValue(i)+"\"");
  29. }
  30. }
  31. System.out.print(">");
  32. }
  33. @Override
  34. public void characters(char[] ch, int start, int length)
  35. throws SAXException {
  36. System.out.print(new String(ch,start,length));
  37. }
  38. @Override
  39. public void endElement(String uri, String localName, String name)
  40. throws SAXException {
  41. System.out.print("</");
  42. System.out.print(name);
  43. System.out.print(">");
  44. }
  45. }

然后对XML文件进行解析,代码如下:

  1. package com.etc.sax;
  2. import javax.xml.parsers.SAXParser;
  3. import javax.xml.parsers.SAXParserFactory;
  4. /**
  5. *
  6. * @author zhang lj
  7. *
  8. * 2012-12-19
  9. */
  10. public class TestSAX {
  11. public static void main(String[] args) throws Exception {
  12. SAXParserFactory factory=SAXParserFactory.newInstance();
  13. SAXParser parser=factory.newSAXParser();
  14. parser.parse("sax_demo.xml", new MySax());
  15. }
  16. }

到这边解析 就完成了,让我们再看一下dom解析 和sax解析 的区别吧,

区别如下:

区别。。。。。。。。。。。。。。。

 

 

 

 

 

原创粉丝点击