01_20_XML文件解析
-
//XMLActitity.java
-
package mars.xml;
-
-
import java.io.StringReader;
-
-
import javax.xml.parsers.SAXParserFactory;
-
-
import mars.utils.HttpDownloader;
-
-
import org.xml.sax.InputSource;
-
import org.xml.sax.XMLReader;
-
-
import android.app.Activity;
-
import android.os.Bundle;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.widget.Button;
-
-
public class XMLActitity extends Activity {
-
/** Called when the activity is first created. */
-
private Button parseButton ;
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
parseButton = (Button)findViewById(R.id.parseButton);
-
parseButton.setOnClickListener(new ParseButtonListener());
-
}
-
-
class ParseButtonListener implements OnClickListener{
-
@Override
-
public void onClick(View v) {
-
HttpDownloader hd = new HttpDownloader();
-
String resultStr = hd.download("");
-
System.out.println(resultStr);
-
-
-
/*1、创建一个SAXParserFactory:factoryy = SAXParserFactory.newInstance()
-
*2、创建一个XMLReader:reader = factory.newSAXParser().getXMLReader()
-
*3、为XMLReader设置内容处理器:reader.setContentHandler(new MyContentHandler());
-
*4、开始解析文件:reader.parse(new InputSource(new StringReader(resultStr)))
-
* String ->StringReader ->InputSource ->parse*/
-
-
try{
-
//创建一个SAXParserFactory
-
SAXParserFactory factory = SAXParserFactory.newInstance();
-
XMLReader reader = factory.newSAXParser().getXMLReader();
-
//为XMLReader设置内容处理器
-
reader.setContentHandler(new MyContentHandler());
-
//开始解析文件
-
reader.parse(new InputSource(new StringReader(resultStr)));
-
}
-
catch(Exception e){
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
//MyContentHandler.java
-
package mars.xml;
-
-
import org.xml.sax.Attributes;
-
import org.xml.sax.SAXException;
-
import org.xml.sax.helpers.DefaultHandler;
-
-
public class MyContentHandler extends DefaultHandler {
-
String hisname, address, money, sex, status;
-
String tagName;
-
-
public void startDocument() throws SAXException {
-
System.out.println("````````begin````````");
-
}
-
-
public void endDocument() throws SAXException {
-
System.out.println("````````end````````");
-
}
-
-
/*startElement(String namespaceURI, String localName,
-
String qName, Attributes attr)
-
* namespaceURI:表命名空间
-
* localName:没有前缀的标签
-
* qName:表带前缀的标签
-
* attr:表标签的属性*/
-
public void startElement(String namespaceURI, String localName,
-
String qName, Attributes attr) throws SAXException {
-
tagName = localName;
-
if (localName.equals("worker")) {
-
//获取标签的全部属性
-
for (int i = 0; i < attr.getLength(); i++) {
-
System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i));
-
}
-
}
-
}
-
-
public void endElement(String namespaceURI, String localName, String qName)
-
throws SAXException {
-
//在workr标签解析完之后,会打印出所有得到的数据
-
tagName = "";
-
if (localName.equals("worker")) {
-
this.printout();
-
}
-
}
-
-
/*characters(char[] ch, int start, int length)得到标签的内容
-
* ch[] 存放读到的数据放在ch数组
-
* start:表从哪开始是SAX读取的内容、
-
* length表长度*/
-
public void characters(char[] ch, int start, int length)
-
throws SAXException {
-
if (tagName.equals("name"))
-
hisname = new String(ch, start, length);
-
else if (tagName.equals("sex"))
-
sex = new String(ch, start, length);
-
else if (tagName.equals("status"))
-
status = new String(ch, start, length);
-
else if (tagName.equals("address"))
-
address = new String(ch, start, length);
-
else if (tagName.equals("money"))
-
money = new String(ch, start, length);
-
}
-
-
private void printout() {
-
System.out.print("name: ");
-
System.out.println(hisname);
-
System.out.print("sex: ");
-
System.out.println(sex);
-
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();
-
}
-
-
}
-
//HttpDownloader.java
-
package mars.utils;
-
-
import java.io.BufferedReader;
-
import java.io.File;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.io.InputStreamReader;
-
import java.net.HttpURLConnection;
-
import java.net.MalformedURLException;
-
import java.net.URL;
-
-
-
public class HttpDownloader {
-
private URL url = null;
-
-
/**
-
* 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
-
* 1.创建一个URL对象
-
* 2.通过URL对象,创建一个HttpURLConnection对象
-
* 3.得到InputStram
-
* 4.从InputStream当中读取数据
-
* @param urlStr
-
* @return
-
*/
-
public String download(String urlStr) {
-
StringBuffer sb = new StringBuffer();
-
String line = null;
-
BufferedReader buffer = null;
-
try {
-
// 创建一个URL对象
-
url = new URL(urlStr);
-
// 创建一个Http连接
-
HttpURLConnection urlConn = (HttpURLConnection) url
-
.openConnection();
-
// 使用IO流读取数据
-
buffer = new BufferedReader(new InputStreamReader(urlConn
-
.getInputStream()));
-
while ((line = buffer.readLine()) != null) {
-
sb.append(line);
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
buffer.close();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
return sb.toString();
-
}
-
-
/**
-
* 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
-
*/
-
public int downFile(String urlStr, String path, String fileName) {
-
InputStream inputStream = null;
-
try {
-
FileUtils fileUtils = new FileUtils();
-
-
if (fileUtils.isFileExist(path + fileName)) {
-
return 1;
-
} else {
-
inputStream = getInputStreamFromUrl(urlStr);
-
File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream);
-
if (resultFile == null) {
-
return -1;
-
}
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
return -1;
-
} finally {
-
try {
-
inputStream.close();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
return 0;
-
}
-
-
/**
-
* 根据URL得到输入流
-
*
-
* @param urlStr
-
* @return
-
* @throws MalformedURLException
-
* @throws IOException
-
*/
-
public InputStream getInputStreamFromUrl(String urlStr)
-
throws MalformedURLException, IOException {
-
url = new URL(urlStr);
-
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
-
InputStream inputStream = urlConn.getInputStream();
-
return inputStream;
-
}
-
}
结果如下:但没有打印
````````end````````的??????
04-10 11:07:37.103: I/System.out(835):
Mark male manager Guangdong 8000 Merry female employee Shanghai 4000 Tom male Manger Beijing 1000000
04-10 11:07:42.133: I/System.out(835): ````````begin````````
04-10 11:07:46.253: I/System.out(835): id=AQ01
04-10 11:07:46.947: I/System.out(835): name: Mark
04-10 11:07:46.947: I/System.out(835): sex: male
04-10 11:07:46.952: I/System.out(835): status: manager
04-10 11:07:46.976: I/System.out(835): address: Guangdong
04-10 11:07:46.981: I/System.out(835): money: 8000
04-10 11:07:47.002: I/System.out(835): id=AQ02
04-10 11:07:47.002: I/System.out(835): name: Merry
04-10 11:07:47.002: I/System.out(835): sex: female
04-10 11:07:47.025: I/System.out(835): status: employee
04-10 11:07:47.025: I/System.out(835): address: Shanghai
04-10 11:07:47.045: I/System.out(835): money: 4000
04-10 11:07:47.045: I/System.out(835): id=AQ03
04-10 11:07:47.106: I/System.out(835): name: Tom
04-10 11:07:47.106: I/System.out(835): sex: male
04-10 11:07:47.112: I/System.out(835): status: Manger
04-10 11:07:47.149: I/System.out(835): address: Beijing
04-10 11:07:47.149: I/System.out(835): money: 1000000
阅读(668) | 评论(0) | 转发(0) |