zoukankan      html  css  js  c++  java
  • 非常简单的XML解析(SAX解析、pull解析)

    这里只是把解析的数据当日志打出来了   非常简单的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")); } }
  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/huxdiy/p/3742103.html
Copyright © 2011-2022 走看看