一.Android 实现解析XML ,
DOM解析,SAX解析 ,以及PULL解析
public class MainActivity extends AppCompatActivity {
private String CurrentTag=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initview();
}
//初始化控件
private void initview(){
Button ParseXml_btn = (Button) findViewById(R.id.ParseXml_btn);
//解析XML
ParseXml_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new MyTask().execute();
}
});
}
//线程间通信机制
//子线程+Handler
//异步任务类 AsyncTask
class MyTask extends AsyncTask{
@Override
protected Object doInBackground(Object[] objects) {
try {
//目标地址
URL url=new URL("http://192.137.43.125/persons.xml");
//打开请求
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//设置请求方式
httpURLConnection.setRequestMethod("GET");
//设置超时请求(5秒)
httpURLConnection.setConnectTimeout(5000);
//获取返回结果码
int code = httpURLConnection.getResponseCode();
//成功 200
if(code==200){
//获取服务器返回的结果
InputStream is = httpURLConnection.getInputStream();
//打印输出 调试
// BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is));
// String str=null;
// while ((str=bufferedReader.readLine())!=null){
// Log.i("tests",str);
// }
//一.原生态获取XML 使用DOM
// DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
// DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//
// //转换成Document 对象
// Document document = documentBuilder.parse(is);
// //获取跟节点
// Element root = document.getDocumentElement();
//
// //获取根节点 下所有的子节点对象
// NodeList nodeList = root.getElementsByTagName("person");
//
// //遍历 输出
// for (int i = 0; i < nodeList.getLength(); i++) {
// //获取单个 子节点对象
// Element personElemnet = (Element) nodeList.item(i);
// //获取子节点对象 属性id
// String id=personElemnet.getAttribute("id");
//
// //获取该子节点 下标签的值
// Element nameElement = (Element) personElemnet.getElementsByTagName("name").item(0);
// String name=nameElement.getTextContent();
//
// Element ageElement = (Element) personElemnet.getElementsByTagName("age").item(0);
// String age=ageElement.getTextContent();
//
// Log.i("tests","id:"+id+" age:"+age+" name:"+name);
// }
// //二.SAX 边读边解析 (基于事件方法 驱动方式)
// SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
// SAXParser saxParser = saxParserFactory.newSAXParser();
//
// saxParser.parse(is,new DefaultHandler(){
//
// //开始根节点
// @Override
// public void startDocument() throws SAXException {
// super.startDocument();
// }
//
// //结束根节点
// @Override
// public void endDocument() throws SAXException {
// super.endDocument();
// }
//
// //开始标签
// @Override
// public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// super.startElement(uri, localName, qName, attributes);
// //赋值 标签名字
// CurrentTag=localName;
// if("person".equals(localName)){
// //取出属性 id
// String id=attributes.getValue(0);
// Log.i("tests",id);
// }
//
//
// }
//
// //结束标签
// @Override
// public void endElement(String uri, String localName, String qName) throws SAXException {
// super.endElement(uri, localName, qName);
// CurrentTag=null;
// }
//
// //正文
// @Override
// public void characters(char[] ch, int start, int length) throws SAXException {
// super.characters(ch, start, length);
// //判断CurrentTag的值
// if("name".equals(CurrentTag)){
// String name=new String(ch,start,length);
// Log.i("tests",name);
// }else if("age".equals(CurrentTag)){
// String age=new String(ch,start,length);
// Log.i("tests",age);
// }
//
// }
//
// });
//
// //三.使用PULL解析 (类似SAX)
XmlPullParser xmlPullParser = Xml.newPullParser();
xmlPullParser.setInput(is,"UTF-8");
//获取要解析的标签类型
int type = xmlPullParser.getEventType();
while(type!=XmlPullParser.END_DOCUMENT){
switch (type){
case XmlPullParser.START_TAG:
//获取标签的名字
String TagName=xmlPullParser.getName();
if("person".equals(TagName)){
String id=xmlPullParser.getAttributeName(0);
Log.i("tests",id);
}else if("name".equals(TagName)){
String name=xmlPullParser.nextText();
Log.i("tests",name);
}else if("age".equals(TagName)){
String age=xmlPullParser.nextText();
Log.i("tests",age);
}
break;
case XmlPullParser.END_TAG:
break;
}
//细节 type的变化
type=xmlPullParser.next();
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
// catch (ParserConfigurationException e) {
// e.printStackTrace();
// } catch (SAXException e) {
// e.printStackTrace();
// }
// catch (ParserConfigurationException e) {
// e.printStackTrace();
// } catch (SAXException e) {
// e.printStackTrace();
// }
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
//展示解析的结果
}
}
}
因为解析XML是耗时操作,所以用了
异步任务类 AsyncTask来执行操作
具体操作 看以上代码