Android学习笔记 - XML篇

1.什么是SAX
 DOM的原理:把一个XML文档当成树,完全加载到内存中,不适合大文件处理
 SAX的原理:逐行进行XML文档的解析,适合大文件处理,但操作较复杂,且添加节点麻烦
 SAX = Simple API for XML
 
2.SAX基本原理
 顺序逐行扫描,当扫描到文档开始与结束、元素开始与结束触发事件,以事件为驱动。
 相关事件:
  1.在文档开始和结束的时候处理事件
  2.在文档内每一个XML元素接受解析前后触发事件
  3.任何元数据通常都由单独的事件交付
  4.在处理文档的DTD或Schema时产生事件
  5.发生错误时产生事件


 相关类:
  SAXParserFactory //SAX工厂类
  SAXParser //SAX解析类
  SAXReader //SAX读取类
  ContentHandler //内容事件
  ErrorHandler //错误事件
  DTDHandler //DTD事件
  EntityResolver //元素事件


 解析过程:
  <doc>
   <para>Hello Android</para>
  </doc>
  start document
  start element : doc
  start element : para
  characters : Hello Android
  end element : para
  end element : doc
  end document


 解析步骤:
  1.创建事件处理程序
  2.创建SAX解析器
  3.将事件处理程序分配给解析器
  4.对文档进行解析,将每个事件发送给处理程序
 
3.SAX常用接口
 ContentHandler接口
  void startDocument()
  void endDocument()
  void startElement(String uri, String localName, String qName, Attributes atts)
  void endElement(String uri, String localName, String qName)
  void characters(char[] ch, int start, int length)

4.SAX解析

	String xml = new DownloadHelper().DownloadString("http://...");
	SAXParserFactory factory = SAXParserFactory.newInstance(); //创建工厂类
	XmlReader reader = factory.newSAXParser().getXmlReader(); //获取读取器
	reader.setContentHandler(new MyContentHandler());
	reader.parse(new InputSourse(new StringReader(xml)));
	
	public MyContentHandler extends DefaultHandler{
		public void startDocument() throws SAXException{
			System.out.println("start read...");
		}
		public void endDocument() throws SAXException{
			System.out.println("end read...");
		}
		public void startElement(String nsUri, String localName, String qName, Attributes atts) throws SAXException{
			//nsUri : 名字空间
			//localName : 节点名称
			//qName : 带前缀的节点名称
			//attr : 节点的属性
			if(localName.equals("worker")){
				for(int i=0; i<attr.getLength; i++){
					System.out.println(attr.getLocalName(i) + ":" + attr.getValue(i));
				}
			}
		}
		public void endElement() throws SAXException{
		}
		public void characters(char[] ch, int start, int length) throws SAXException{
			//ch 节点中的内容(InnerText)
			//start 从ch中的哪一位开始
			//length 长度
			String tmp = new String(ch, start, len);
		}
	}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值