Android解析xml(DOM SAX PULL)
2017-03-05 09:41
363 查看
也不知在黑暗中究竟沉睡了多久,也不知要有多难才能睁开双眼,我从远方赶来 恰巧你们也在,痴迷流连人间 我为她而狂野,我是这耀眼的瞬间,是划过天边的刹那火焰,我为你来看我不顾一切,我将熄灭永不能再回来,我在这里啊,就在这里啊,惊鸿一般短暂,像夏花一样绚烂,这是一个多美丽又遗憾的世界
——《生如夏花》朴树
Android端向web端访问数据,web端返回数据xml的形式,Android端自己解析。
首先在web端新建一个ssm框架的项目:
数据直接从数据库(MySQL)里面调用,而不是直接写死的数据
最重要的一点就是在JSP里,生成xml的格式时,切记不能空格,对于有些电脑要多加一行代码(<%@page isELIgnored=”false” %>)
开始解析:从web端访问过来的数据解析到listview里
DOM解析:(DocumentBuilder,DocumentBuilderFactory,Document)原生态jdbc低层代码。
特点:解析速度快,一次性解析整个文档。加载大文件时候效率低。
SAX解析:(SAXParser,SAXParserFactory):使用流的形式处理,是一种以基于事件(方法)为驱动的解析器。
特点:边读边解析,解析速度快,占用内存少,同时sax解析提供了很多方法:开始、结束标签;
9149
开始、结束文档;文本的方法。
PULL解析:Pull解析器与SAX解析器性质类似,都是基于事件处理模式。用法不同:Pull解析器需要自己获取事件后做出相当于的操作,pull是用于Android,用于Java中需要导入pull解析依赖包。
特点:解析速度快、使用方便、效率高。
在values里面的strings.xml我把IP地址写在了这里面,就可以让他在以后的XML解析方便调用就好了,因为每次联网的IP地址都会改变,所有每次连网都要在strings.xml里面改下IP地址就可以
最后在清单文件中配置联网权限:
——《生如夏花》朴树
Android端向web端访问数据,web端返回数据xml的形式,Android端自己解析。
首先在web端新建一个ssm框架的项目:
数据直接从数据库(MySQL)里面调用,而不是直接写死的数据
最重要的一点就是在JSP里,生成xml的格式时,切记不能空格,对于有些电脑要多加一行代码(<%@page isELIgnored=”false” %>)
开始解析:从web端访问过来的数据解析到listview里
public class MainActivity extends AppCompatActivity { private ListView lv_main_getdata_xml; private ProgressDialog progressDialog; private List<Userentity> Listuser=new ArrayList<>(); private ListViewAdapter listViewAdapter; String currentTag=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_main_getdata_xml = (ListView) findViewById(R.id.lv_main_getdata_xml); listViewAdapter = new ListViewAdapter(); lv_main_getdata_xml.setAdapter(listViewAdapter); progressDialog = new ProgressDialog(this); progressDialog.setMessage("正在拼命loading中..."); } class MyTask extends AsyncTask { private Userentity user; private Userentity users; @Override protected void onPreExecute< 4000 /span>() { super.onPreExecute(); progressDialog.show(); } @Override protected Object doInBackground(Object[] params) { final List<Userentity> Lists=new ArrayList<>(); //获取网络数据 //01.定义获取网络数据的路径 String path =getString(R.string.server_name)+"listuser.xhtml"; try { //02.实例化URL URL url = new URL(path); //03.获取对象链接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //04.设置请求方式 connection.setRequestMethod("GET"); //05.设置链接超时的时间 connection.setConnectTimeout(5000); //06.获取响应码 int code=connection.getResponseCode(); //Log.i("test"," "+code); if (code==200) { //07.获取返回过来的数据(xml) InputStream is = connection.getInputStream(); //08.测试(删除--注释) //缓冲字符流 /*String str=null; BufferedReader br=new BufferedReader(new InputStreamReader(is)); while ((str=br.readLine())!=null){ Log.i("test",str); }*/ //09.解析XML(DOM SAX PULL) //09.1 DOM解析 // try { // DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance(); // DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder(); // Document document=documentBuilder.parse(is); // //获取根标签 // Element root=document.getDocumentElement(); // NodeList nodeList=root.getElementsByTagName("user"); // for (int i = 0; i < nodeList.getLength(); i++) { // Element element= (Element) nodeList.item(i); // //获取属性的名字 // String id=element.getAttribute("id"); // // //获取子标签name pwd // Element elementName= (Element) element.getElementsByTagName("name").item(0); // String name=elementName.getTextContent(); // Element elementPwd= (Element) element.getElementsByTagName("pwd").item(0); // String pwd=elementPwd.getTextContent(); // Log.i("test"," "+id+" "+name+" "+pwd); // // Userentity user=new Userentity(id,name,pwd); // Lists.add(user); // // } // } catch (ParserConfigurationException e) { // e.printStackTrace(); // } catch (SAXException e) { // e.printStackTrace(); // } //09.2 SAX解析 特点:边读边解析 基于事件(方法)驱动 //开始标签 结束标签 开始文档 结束文档 文本 // try { // // 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 ("user".equals(localName)){ // //实列化对象 // user = new Userentity(); // String id=attributes.getValue(0); // user.setUid(id); // } // } // @Override // public void endElement(String uri, String localName, String qName) throws SAXException { // super.endElement(uri, localName, qName); // currentTag=null; // if ("user".equals(localName)){ // Lists.add(user); // } // } // // @Override // public void characters(char[] ch, int start, int length) throws SAXException { // super.characters(ch, start, length); // if("name".equals(currentTag)){ // String name=new String(ch,start,length); // user.setUname(name); // // }else if("pwd".equals(currentTag)){ // String pwd=new String(ch,start,length); // user.setUpwd(pwd); // // } // } // }); // } catch (ParserConfigurationException e) { // e.printStackTrace(); // } catch (SAXException e) { // e.printStackTrace(); // } //09.3 PULL解析 try { 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 startNameTag=xmlPullParser.getName(); if("user".equals(startNameTag)){ users = new Userentity(); String id=xmlPullParser.getAttributeValue(0); users.setUid(id); }else if("name".equals(startNameTag)){ String name= xmlPullParser.nextText(); users.setUname(name); }else if("pwd".equals(startNameTag)){ String pwd= xmlPullParser.nextText(); users.setUpwd(pwd); } break; case XmlPullParser.END_TAG: //获取结束标签的名字 String endTagName=xmlPullParser.getName(); if("user".equals(endTagName)){ Lists.add(users); } break; } type=xmlPullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return Lists; } @Override protected void onPostExecute(Object object) { super.onPostExecute(object); List<Userentity> Lists= (List<Userentity>)object; Listuser.addAll(Lists); listViewAdapter.notifyDataSetChanged(); progressDialog.cancel(); } } public void getDataXML(View view) { new MyTask().execute(); } //给listview设置适配器 class ListViewAdapter extends BaseAdapter { @Override public int getCount() { return Listuser.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = getLayoutInflater().inflate(R.layout.activity_textview, null); //拿控件 TextView list_text_id = (TextView) view.findViewById(R.id.list_text_id); TextView list_text_name = (TextView) view.findViewById(R.id.list_text_name); TextView list_text_pwd = (TextView) view.findViewById(R.id.list_text_pwd); //绑定数值 list_text_id.setText(Listuser.get(position).getUid()); list_text_name.setText(Listuser.get(position).getUname()); list_text_pwd.setText(Listuser.get(position).getUpwd()); return view; } } }
DOM解析:(DocumentBuilder,DocumentBuilderFactory,Document)原生态jdbc低层代码。
特点:解析速度快,一次性解析整个文档。加载大文件时候效率低。
SAX解析:(SAXParser,SAXParserFactory):使用流的形式处理,是一种以基于事件(方法)为驱动的解析器。
特点:边读边解析,解析速度快,占用内存少,同时sax解析提供了很多方法:开始、结束标签;
9149
开始、结束文档;文本的方法。
PULL解析:Pull解析器与SAX解析器性质类似,都是基于事件处理模式。用法不同:Pull解析器需要自己获取事件后做出相当于的操作,pull是用于Android,用于Java中需要导入pull解析依赖包。
特点:解析速度快、使用方便、效率高。
在values里面的strings.xml我把IP地址写在了这里面,就可以让他在以后的XML解析方便调用就好了,因为每次联网的IP地址都会改变,所有每次连网都要在strings.xml里面改下IP地址就可以
最后在清单文件中配置联网权限:
<uses-permission android:name="android.permission.INTERNET" />
相关文章推荐
- android-XML解析Dom,Sax,Pull
- Android 使用SAX或者DOM或者pull解析XML文件
- android中解析XML文件方式—DOM SAX PULL
- Android--入门---16---(Android中xml 的生成 & 解析---DOM . SAX . PULL)
- (转)Android中解析XML:SAX、DOM、PULL
- android解析XML的三种方式(DOM,SAX,PULL)
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android解析XML三种方式(PULL、SAX、DOM)
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android用Sax,Pull,Dom解析xml
- android解析XML总结(SAX、Pull、Dom三种方式)附带DOM4J、JDOM
- android解析XML总结(SAX、Pull、Dom三种方式)
- 我的Android进阶之旅------>Android中解析XML 技术详解---->SAX解析、DOM解析、PULL解析
- android解析XML总结(SAX、Pull、Dom三种方式)附带DOM4J、JDOM
- Android SAX,DOM,PULL解析XML文档
- Android 中利用SAX ,Dom,pull解析 XML 文件
- 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull)
- Android解析XML三种方式(PULL、SAX、DOM)
- android解析XML总结(SAX、Pull、Dom三种方式)
- android解析XML总结(SAX、Pull、Dom三种方式)