假期总结不能停,坚持坚持。。。。接下来总结一下XMl和json的解析和生成。。 
解析XML的四种方法,即:DOM、SAX、JDOM和DOM4J

下面首先给出这四种方法的jar包下载地址: 
DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 
SAX:http://sourceforge.net/projects/sax/ 
JDOM:http://jdom.org/downloads/index.html 
DOM4J:http://sourceforge.net/projects/dom4j/ 
现编开始一一介绍: 
SAX:也是我第一个学的方法。。。 
SAX是一种解析速度快并且占用内存少的XML解析器,非常适用于Android的移动设备。 
SAX采用事件驱动`,也就是说,它并不是需要解析完整的文档,在按内容顺序解析文档的过程中,Sax会判断当前读到的字符是否符合XMl语法的某部分,如果符合就会触发事件。 
所谓事件,其实就是一些回掉方法,这些事件定义在GefaultHandler中。 
解析过程: 
(1)创建SAX解析器 
SAXParserFactory factory=SAXParserFactory.newInstance(); 
//reader对象,从解析器得到reader 
XMLReader reader = factory.newSAXParser().getXMLReader(); 
(2)实现解析DefaultHandler 
主要实现其中的4个方法: 
Void startDocument(), void endDocument(), void startElement(String uri,String localName,string qName,Attributes attr). 
Void endElement(String uri,String localName,string qName) 
android示例代码:

package com.example.xmltest;
import java.text.AttributedCharacterIterator.Attribute;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; //缺省实现所有处理器接口的帮助类DefaultHandler
public class MyContentHandler extends DefaultHandler{ String hisname,address,money,sex,status;
String tagName;
/**
* @param args
*/
public void startDocument() throws SAXException{
System.out.println("、、、、begin、、、、");
} public void endDocument() throws SAXException{
System.out.println("、、、、end、、、、");
}
//QName(Qualified Name 限定?指定?名称)
//sina:blog就是QName,相当于前缀+":"+LocalName,LocalName是blog。
//Attributes得到标签的属性,一个标签可以有多个属性<worker id="AD002">中id就是属性
public void startElement(String namespaceURI, String localName
,String qName, Attributes attr) throws SAXException{
tagName = localName;
System.out.println("tagName:"+tagName);
//localName 属性返回被选元素的本地名称(元素名称)。
//如果选定的节点不是元素或属性,则该属性返回 NULL
if(localName.equals("worker")){
//获取标签的全部属性
for(int i = 0;i < attr.getLength();i++){
System.out.println(attr.getLocalName(i)+"="+attr.getValue(i));
}
//getLocalName(i)得到是id getValue(i)得到的是后边的值
}
}
//namespaceURI命名空间,得到当前正在解析的标签的命名空间,用于区分标签;localname不带前缀,qname带前缀
public void endElement(String namespaceURI, String localName,String qName)
throws SAXException{
//获取标签的全部属性
if(localName.equals("worker")){
this.printout(); //全部输出
}
tagName="";
}
//得到值,tagName在startElement中已经是标签名啦。。。
public void characters(char[] ch,int start,int length)throws SAXException{
if(tagName.equals("name"))
hisname = new String(ch,start,length).trim();
else if(tagName.equals("sex"))
sex = new String(ch,start,length).trim();
else if(tagName.equals("status"))
status = new String(ch,start,length).trim();
else if(tagName.equals("address"))
address = new String(ch,start,length).trim();
else if(tagName.equals("money")){
money = new String(ch,start,length).trim();
}
}
private void printout(){
System.out.print("name: ");
System.out.println(hisname);
System.out.print("sex: ");
System.out.println(sex);
System.out.println("cdv");
System.out.print("status: ");
System.out.println(status);
System.out.print("address: ");
System.out.println(address);
System.out.print("money: ");
System.out.println(money);
System.out.println();
}
}

  下边是Activity的代码:

package com.example.xmltest;

import java.io.StringReader;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import com.example.utils.HttpDownloader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; //对应的文件在D:\tomcat-6.0.43\webapps\voal
public class XMLActivity extends Activity {
private Button parsebutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xml);
parsebutton = (Button)findViewById(R.id.parsebutton);
parsebutton.setOnClickListener(new ParseButtonListener());
}
/**
* 住线程中不能申请网络服务!!!!另起线程
* @author 超超boy
*/
class ParseButtonListener implements OnClickListener{ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("启动线程");
new Thread(new Down()).start();
}
}
class Down implements Runnable{ @Override
public void run() {
// TODO Auto-generated method stub
HttpDownloader hd = new HttpDownloader();
//resultStr返回的是文件内容
String resultStr = hd.download("http://192.168.253.1:8088/voal/test.xml");
//这个是自己搭建的服务器中的文件 System.out.println(resultStr);
try{
//创建一个SAXParserFactory解析器工程
SAXParserFactory factory = SAXParserFactory.newInstance();
//reader对象,从解析器得到reader
XMLReader reader = factory.newSAXParser().getXMLReader();
//为xmlreader设置内容处理器,逐行扫描,调用函数,要调用的函数就在MyContentHandler实现类中
reader.setContentHandler(new MyContentHandler());
//开始解析文件
System.out.println("开始解析");
reader.parse(new InputSource(new StringReader(resultStr)));
}catch(Exception e){
e.printStackTrace();
}
}
}
}

  解析的原文件:

<?xml version="1.0" encoding="UTF-8"?>
<workers>
<worker id="AQ01">
<name>Jery</name>
<sex>女</sex>
<status>经理</status>
<address>北京</address>
<money>4000</money>
</worker>
<worker id="AD02">
<name>Lili</name>
<sex>女</sex>
<status>总监</status>
<address>青岛</address>
<money>40000</money>
</worker>
<worker id="AD03">
<name>ChaoCaho</name>
<sex>男</sex>
<status>董事长</status>
<address>青岛</address>
<money>400000</money>
</worker>
</workers>

  转载请注明出处:http://www.cnblogs.com/jycboy/p/saxparxml.html

解析XML的几种方法之SAX解析的更多相关文章

  1. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  2. 【Java】详解Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语 ...

  3. Java解析XML的四种方法详解 - 转载

    XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法 在做一般的XML数据交换过程中,我更乐意传递XML字符串,而不是格式化 ...

  4. XML解析的二种方法之Sax解析

    package com.huawei.xml; import java.io.InputStream;import java.util.Stack; import javax.xml.parsers. ...

  5. Java 解析XML的几种方法

    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已. 基本的解析方式 ...

  6. php 解析xml 的四种方法(转)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  7. php 解析xml 的四种方法

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  8. java解析XML文件四种方法之引入源文件

    1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         Documen ...

  9. 解析xml的4种方法详解

    1. 介绍 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许 ...

随机推荐

  1. struts2整合CKEditor和CKFinder实现上传

    上一篇文章给大家分享了CKEditor+CKFinder+JSP实现了在线编辑器上传图片的功能,这里在给大家分享一下如何在前面的基础上在struts2下实现这样的功能. 实现与Struts2的整合,整 ...

  2. smartjs - DataManager API

    dataServices 数据服务的管理器:首先看下具体的代码 //数据服务 dataServices = st.factory({ name: "dataServices", p ...

  3. Linux下查看tcp连接数及状态

    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ TIME_WAIT 8947FIN_WAIT1 15FIN_W ...

  4. 使用C语言描述静态链表和动态链表

    静态链表和动态链表是线性表链式存储结构的两种不同的表示方式. 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 动态链表是相对于静态链 ...

  5. Microsoft Visual Studio 2013 VSTS单元测试指南

    安装vs2013时并未安装VSTS工具包,所以在工具栏:工具->拓展和更新   进行下载安装 vs13已经用了两年了,相比于之前老师推荐的vc6.0感觉要强出很多,刚上手时感觉比较困难,在使用一 ...

  6. Tools - Notepad++

    NotePad++ https://notepad-plus-plus.org/ 修改主题 依次点击设置---语言格式设置---选择主题,在显示界面中修改相关设置(背景色.前景色.字体等). 双文本横 ...

  7. Supervisor – 用于 Unix 系统的进程监控工具

    Supervisor 是一个客户端/服务端模式的系统,使用户能够监视和控制 UNIX 操作系统的进程.Supervisor 为你提供一个地方来启动,停止和监视进程.进程可以单独或成组的形式控制.您还可 ...

  8. Android 学习笔记之Volley(六)实现获取服务器的字符串响应...

    学习内容: 1.使用StringRequest实现获取服务器的字符串响应...   前几篇一直都在对服务——响应过程的源码进行分析,解析了整个过程,那么Volley中到底实现了哪些请求才是我们在开发中 ...

  9. 禁用mac Command w

    事情是这样的:历经各种调查,终于定位到了一个bug,正在我准确Command + 数字 切换下iterm2的窗口时,让我懵逼的事情发生了,我们终端不见了,对不见了.心里万马奔腾啊.什么鬼?原来自己误按 ...

  10. 2015 Multi-University Training Contest 2 1002 Buildings

    Buildings Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5301 Mean: n*m列的网格,删除一个格子x,y,用矩形 ...