Android解析XML(DOM解析,SAX解析,PULL解析)
来源:互联网 发布:如何下载matlab软件 编辑:程序博客网 时间:2024/06/11 13:24
一堆堆乌云,像青色的火焰,在无底的大海上燃烧。大海抓住闪电的箭光,把它们熄灭在自己的深渊里。这些闪电的影子,活像一条条火蛇,在大海里蜿蜒游动,一晃就消失了。
——暴风雨!暴风雨就要来啦!
这是勇敢的海燕,在怒吼的大海上,在闪电中间,高傲地飞翔;这是胜利的预言家在叫喊:
——让暴风雨来得更猛烈些吧!
高尔基《海燕》
我用的是SSM框架写的
Java代码:
UserController.java
@Controller@RequestMapping("/front/")public class UserController { @Autowired UserDao ud; @RequestMapping("adduser.xhtml") public String AddUser(Userentity userentity,HttpServletRequest request){ String uname=request.getParameter("uname"); String pwd=request.getParameter("pwd"); Userentity user=new Userentity(); user.setUname(uname); user.setPwd(pwd); int n=ud.addUser(user); if(n>0){ System.out.println("增加成功"); }else{ System.out.println("增加失败"); } return "index"; } @RequestMapping("getuser.xhtml") public String getuser(HttpServletRequest request){ List<Userentity> list=new ArrayList<Userentity>(); list=ud.getUsers(); request.setAttribute("list", list); return "index"; }}
UserDao.java
public interface UserDao { public int addUser(Userentity userentiy); public List<Userentity > getUsers();
Userentity.java
public class Userentity { private Integer uid; private String uname; private String pwd; public Userentity(){ } public Userentity(Integer uid, String uname, String pwd) { super(); this.uid = uid; this.uname = uname; this.pwd = pwd; } public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; }}
Userentity.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.zking.dao.UserDao"> <insert id="addUser" parameterType="com.zking.entity.Userentity"> INSERT into user values(null,#{uname},#{pwd}); </insert> <select id="getUsers" resultType="com.zking.entity.Userentity"> select * from user </select> </mapper>
FastJsonHttpMessageConverter.java
public class FastJsonHttpMessageConverter extends AbstractHttpMessageConverter<Object> { public final static Charset UTF8 = Charset.forName("UTF-8"); private Charset charset = UTF8; private SerializerFeature[] serializerFeature; @Override protected boolean supports(Class<?> clazz) { return true; } @Override protected Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream in = inputMessage.getBody(); byte[] buf = new byte[1024]; for (;;) { int len = in.read(buf); if (len == -1) { break; } if (len > 0) { baos.write(buf, 0, len); } } byte[] bytes = baos.toByteArray(); if (charset == UTF8) { return JSON.parseObject(bytes, clazz); } else { return JSON.parseObject(bytes, 0, bytes.length, charset.newDecoder(), clazz); } } @Override protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { OutputStream out = outputMessage.getBody(); byte[] bytes; if (charset == UTF8) { if (serializerFeature != null) { bytes = JSON.toJSONBytes(obj, serializerFeature); } else { bytes = JSON.toJSONBytes(obj, SerializerFeature.WriteDateUseDateFormat); } } else { String text; if (serializerFeature != null) { text = JSON.toJSONString(obj, serializerFeature); } else { text = JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); } bytes = text.getBytes(charset); } out.write(bytes); }}
index.jsp
<?xml version="1.0" encoding="UTF-8" ?><%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@page isELIgnored="false" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><fqs><c:forEach items="${list}" var="fq"> <fq name="${fq.uid}"> <name>${fq.name}</name> <content>${fq.content}</content> <time>${fq.time}</time> </fq> </c:forEach> </fqs>
在这里的话能不空格就不要空格,要不然Android那边解析会出问题
Android:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.zking.risk_android_parsexml.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取XML" android:onClick="getXML" /> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lv_main_list" ></ListView></LinearLayout>
item_listview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Large Text" android:id="@+id/tv_item_listview_name" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Large Text" android:id="@+id/tv_item_listview_content" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Large Text" android:id="@+id/tv_item_listview_time" /></LinearLayout>
MainActity
public class MainActivity extends AppCompatActivity { private ProgressDialog progressDialog; private ListView lv_main_list; private List<Userentity> lists = new ArrayList<>(); private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_main_list = (ListView) findViewById(R.id.lv_main_list); myAdapter = new MyAdapter(); lv_main_list.setAdapter(myAdapter); progressDialog = new ProgressDialog(this); progressDialog.setMessage("正在拼命loading中....."); } class MyAdapter extends BaseAdapter { @Override public int getCount() { Log.i("ListView:",lists.size()+" size:"); return lists.size(); } @Override public Object getItem(int i) { return lists.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if (view == null) { view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_listview, null); ItemTag itemTag = new ItemTag(); itemTag.tv_name = (TextView) view.findViewById(R.id.tv_item_listview_name); itemTag.tv_content = (TextView) view.findViewById(R.id.tv_item_listview_content); itemTag.tv_time = (TextView) view.findViewById(R.id.tv_item_listview_time); view.setTag(itemTag); } ItemTag itemTag = (ItemTag) view.getTag(); itemTag.tv_name.setText(lists.get(i).getName()); itemTag.tv_content.setText(lists.get(i).getContent()); itemTag.tv_time.setText(lists.get(i).getTime()); return view; } } public void getXML(View view) { new MyTask().execute(); } class MyTask extends AsyncTask { @Override protected void onPreExecute() { super.onPreExecute(); progressDialog.show(); } @Override protected Object doInBackground(Object[] params) { List<Userentity> fqs=new ArrayList<>(); //获取网络数据 //1.定义获取网络的数据的路径 String path = getString(R.string.server_name)+"getuser.xhtml"; try { //2.实例化Url URL url = new URL(path); //3.获取连接对象 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //4.设置请求方式 connection.setRequestMethod("GET"); //5.设置请求连接超时的时间[APP优化] connection.setConnectTimeout(5000); //6.获取响应码 int code = connection.getResponseCode(); if (code == 200) { //7.获取返回过来的数据(XML) InputStream is = connection.getInputStream(); //8.测试(删除-注释) //缓冲字符流 String str = null;// BufferedReader br = new BufferedReader(new InputStreamReader(is));//// while ((str = br.readLine()) != null) {// Log.i("test", "str");// } //9.解析XML //方式:DOM SAX PULL //9.1 使用DOM解析// try {// DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();// DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();// Document document = documentBuilder.parse(is);// //获取根标签// Element root = document.getDocumentElement();// Log.i("test", "根标签:" + root.getTagName());// NodeList nodeList = root.getElementsByTagName("fq");// Log.i("test", "根标签:" + nodeList.getLength());// for (int i = 0; i < nodeList.getLength(); i++) {// Element element = (Element) nodeList.item(i);// //获取属性name// String name1 = element.getAttribute("name");// Log.i("test", name1+"");//// //获取子标签<content><time>// Element elementName = (Element) element.getElementsByTagName("name").item(0);// String name = elementName.getTextContent();//// Element elementContent = (Element) element.getElementsByTagName("content").item(0);// String content = elementContent.getTextContent();//// Element elementTime = (Element) element.getElementsByTagName("time").item(0);// String time = elementTime.getTextContent();// Log.i("test",name + " " + content + " " + time);//// Userentity ut = new Userentity(Integer.parseInt(name1),name, content, time);// fqs.add(ut);// }// } catch (ParserConfigurationException e) {// e.printStackTrace();// } catch (SAXException e) {// e.printStackTrace();// } //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);// currenTag = localName;// if ("fq".equals(localName)) {// //实例化对象// userentity = new Userentity();// String name = attributes.getValue(0);// userentity.setName(name);// }//// }//// @Override// public void endElement(String uri, String localName, String qName) throws SAXException {// super.endElement(uri, localName, qName);//// currenTag = null;// if ("fq".equals(localName)) {// fqs.add(userentity);// }////// }//// @Override// public void characters(char[] ch, int start, int length) throws SAXException {// super.characters(ch, start, length);//// if ("content".equals(currenTag)) {// String content = new String(ch, start, length);// userentity.setContent(content);// } else if ("time".equals(currenTag)) {// String time = new String(ch, start, length);// userentity.setTime(time);// }// }// });// } catch (ParserConfigurationException e) {// e.printStackTrace();// } catch (SAXException e) {// e.printStackTrace();// } //3 使用PULL解析 try { XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(is, "UTF-8"); int type = pullParser.getEventType(); while (type != XmlPullParser.END_DOCUMENT) { switch (type) { case XmlPullParser.START_TAG: //获取开始标签 String startTagName = pullParser.getName(); if ("fq".equals(startTagName)) { userentity1 = new Userentity(); String name = pullParser.getAttributeValue(0); userentity1.setName(name); } else if ("content".equals(startTagName)) { String content = pullParser.nextText(); userentity1.setContent(content); } else if ("time".equals(startTagName)) { String time = pullParser.nextText(); userentity1.setTime(time); } break; case XmlPullParser.END_TAG: //获取结束标签的名字 String endTagName = pullParser.getName(); if ("fq".equals(endTagName)) { fqs.add(userentity1); } break; } //type必须要重新赋值,要不然会导致死循环 type = pullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return fqs; } //更新UI @Override protected void onPostExecute(Object o) { super.onPostExecute(o); List<Userentity> fqs = (List<Userentity>) o; lists.addAll(fqs); myAdapter.notifyDataSetChanged(); progressDialog.cancel(); } }}
ItemTag
public class ItemTag { public TextView tv_uid; public TextView tv_name; public TextView tv_content; public TextView tv_time;}
Userentity
public class Userentity { private int uid; private String name; private String content; private String time; public Userentity(int uid, String name, String content, String time) { super(); this.uid = uid; this.name = name; this.content = content; this.time = time; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContent() {return content;} public void setContent(String content) { this.content = content; } public String getTime() { return time; } public void setTime(String time) { this.time = time; }}
strings.xml
<string name="server_name">http://193.168.4.59:8080/front/</string>
在values里面的strings.xml我把IP地址写在了这里面,就可以让他在以后的XML解析方便调用就好了
最后要说的是我这里调用的都是数据库里的数据,而不是死的数据,当然要是死的数据那就方便很多了,每次联网的IP地址都会改变,所有每次连上网都要在strings.xml里面改下IP地址就可以了
0 0
- Android解析XML(DOM解析,SAX解析,PULL解析)
- Android-解析XML(Dom,Sax,Pull)
- Android解析xml(DOM SAX PULL)
- Android 解析XML(DOM解析,SAX解析,PULL解析)
- Android-解析XML(DOM解析,SAX解析,PULL解析)
- Android SAX,DOM,PULL解析XML文档
- android sax dom pull 解析 xml
- Android中XML解析DOM/SAX/PULL
- Android系列--DOM、SAX、Pull解析XML
- Android系列--DOM、SAX、Pull解析XML
- Android系列--DOM、SAX、Pull解析XML
- Android系列--DOM、SAX、Pull解析XML
- Android系列--DOM、SAX、Pull解析XML
- Android解析XML(SAX DOM PULL)
- Android xml文件解析 SAX,DOM,PULL
- Android系列--DOM、SAX、Pull解析XML
- Android系列--DOM、SAX、Pull解析XML
- Android系列--DOM、SAX、Pull解析XML
- Android Studio卡在refreshing gradle project的原因和快速解决办法
- xp下一个奇怪的问题
- 算法设计与应用基础-第二周
- Tomcat catalina.out日志使用log4j按天分割
- java InputStream,String,File byte相互转化
- Android解析XML(DOM解析,SAX解析,PULL解析)
- 封装所有版本兼容的Material风格的时间选择器和日期选择器
- 设计模式---6大原则
- 计算账户的余额及日均余额
- Pycharm远程调试之ssh remote debug(三) -- Before Launch
- 如何解决FPS/RTS/赛车类游戏的同步问题
- [BZOJ2466][中山市选2009]树(高斯消元+dfs)
- ArrayList源码
- Mysql主从复制