这里只是把解析的数据当日志打出来了 非常简单的xml解析方式
1 package com.example.demo.service;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5
6 import javax.xml.parsers.DocumentBuilder;
7 import javax.xml.parsers.DocumentBuilderFactory;
8 import javax.xml.parsers.ParserConfigurationException;
9 import javax.xml.parsers.SAXParser;
10 import javax.xml.parsers.SAXParserFactory;
11
12 import org.w3c.dom.Document;
13 import org.w3c.dom.Node;
14 import org.w3c.dom.NodeList;
15 import org.xml.sax.Attributes;
16 import org.xml.sax.SAXException;
17 import org.xml.sax.helpers.DefaultHandler;
18 import org.xmlpull.v1.XmlPullParser;
19
20 import android.renderscript.Element;
21 import android.util.Log;
22 import android.util.Xml;
23
24 public class PullXMLService {
25 /**
26 *
27 * pull解析
28 * @param is xml输入
29 * @return
30 * @throws Exception
31 */
32 public String pullParser(InputStream is) throws Exception {
33
34 XmlPullParser parser = Xml.newPullParser();
35 //设置编码,编码不对解析不出来
36 parser.setInput(is, "GBK");
37 //接收事件类型
38 int type =parser.getEventType();
39 //事件类型不为END_DOCUMENT 继续循环
40 while (type!=XmlPullParser.END_DOCUMENT) {
41 switch (type) {//判断事件类型是否开始元素
42 case XmlPullParser.START_TAG:
43 //是开始元素开始有条件的解析
44 if("hunan".equals(parser.getName())){
45 Log.e("ss", parser.getAttributeValue(0));
46 }else if("city".equals(parser.getName())){
47 //取属性,可以下标取,也可以属性名称取
48 Log.e("ss", "城市:"+parser.getAttributeValue(2)+"天气:"+parser.getAttributeValue(8)+"温度:"+parser.getAttributeValue(10)+"-"+parser.getAttributeValue(9)+"实时温度"+parser.getAttributeValue(11)+"风力:"+parser.getAttributeValue(12)+"湿度:"+parser.getAttributeValue(14)+"时间:"+parser.getAttributeValue(15)+"");
49 //取文本
50 String text=parser.nextText();
51 }else{
52 }
53 break;
54 }
55 //循环一次更改事件状态
56 type = parser.next();
57 }
58 return null;
59
60 }
61 /**
62 * SAX方式解析Xml
63 * @param is xml输入
64 * @throws ParserConfigurationException
65 * @throws SAXException
66 * @throws IOException
67 */
68 public void saxParsar(InputStream is) throws ParserConfigurationException, SAXException, IOException {
69 //创建sax工厂
70 SAXParserFactory sf = SAXParserFactory.newInstance();
71 //实例化sax
72 SAXParser sp =sf.newSAXParser();
73 //解析调用 ,具体解析方法在 DHDefaultHandler类 在下面
74 sp.parse(is, new DHDefaultHandler());
75
76
77 }
78 103
104 }
105
106 /**
107 * SAX解析通过继承DefaultHandler 重写父类方法实现,具体重写什么方法看具体情况
108 * @author huqiang
109 *
110 */
111 class DHDefaultHandler extends DefaultHandler {
112
113 /**
114 * 开始标签处,可解析处标签属性,具体要解析什么数据自己判断执行,运行顺序
115 * startDocument() → startElement() → characters() → endElement() → endDocument()
116 */
117 @Override
118 public void startElement(String uri, String localName, String qName,
119 Attributes attributes) throws SAXException {
120 // TODO Auto-generated method stub
121 Log.e("afa", "元素解析开始");
122 int attrlegth = attributes.getLength();
123 Log.e("afa"+attrlegth, localName);
124 if("city".equals(qName)){
125 //如果没有值最好处理下,或者空格
126 Log.e("afa", "城市:"+attributes.getValue(2)+"天气:"+attributes.getValue(8)+"温度:"+attributes.getValue(10)+"-"+attributes.getValue(9)+"实时温度"+attributes.getValue(11)+"风力:"+attributes.getValue(12)+"湿度:"+attributes.getValue(15)+"时间:"+attributes.getValue(16)+"");
127 /*for (int i = 0; i < attrlegth; i++) {
128 String attrVal = attributes.getValue(i);
129 Log.e("afa"+i, attrVal+"===localName="+localName+",qName="+qName);
130 }*/
131 }
132 }
133 /**
134 * 解析标签包含的文本,具体需要解析什么标签具体判断
135 */
136 @Override
137 public void characters(char[] ch, int start, int length)
138 throws SAXException {
139 // TODO Auto-generated method stub
140 String str = new String(ch,start,length);
141 Log.e("afa", "解析标签文本");
142 Log.e("afa", ""+str);
143 super.characters(ch, start, length);
144 }
145
146 @Override
147 public void startDocument() throws SAXException {
148 // TODO Auto-generated method stub
149
150 Log.e("afa", "开始解析");
151 super.startDocument();
152 }
153
154 @Override
155 public void endDocument() throws SAXException {
156 // TODO Auto-generated method stub
157 Log.e("afa", "解析结束");
158 super.endDocument();
159 }
160
161 @Override
162 public void endElement(String uri, String localName, String qName)
163 throws SAXException {
164 // TODO Auto-generated method stub
165 Log.e("afa", "元素解析结束");
166 super.endElement(uri, localName, qName);
167 }
168 }
测试类 xml文件放在src目录下面
package com.example.demo.test;
import java.io.InputStream;
import com.example.demo.service.PullXMLService;
import android.test.AndroidTestCase;
public class Test extends AndroidTestCase {
public void testPullParser() throws Exception {
PullXMLService pull = new PullXMLService();
//pull.pullParser(Test.class.getClassLoader().getResourceAsStream("weather.xml"));
pull.saxParsar(Test.class.getClassLoader().getResourceAsStream("weather.xml"));
}
}