convert android layout xml,详解Android之解析XML文件三种方式(DOM,PULL,SAX)
1.xml文件代码
${fq.content}
${fq.time}
2.XML网页效果图
3.Android代码
1.布局文件
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getXML"
android:text="获取XML数据" />
android:id="@+id/lv_main_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main_pull"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getPULL"
android:text="获取PULL数据" />
android:id="@+id/lv_mainpull_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main_sax"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getSAX"
android:text="获取SAX数据" />
android:id="@+id/lv_mainsax_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/tv_item_listview_name"
android:layout_weight="1"/>
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/tv_item_listview_content"
android:layout_weight="1"/>
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/tv_item_listview_time"
android:layout_weight="1"/>
2.java代码
DOM解析代码
public class MainActivity extends AppCompatActivity {
private ListView lv_main_list;
private ProgressDialog progressDialog;
private List fqs = 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("小青正在拼命加載中.....");
}
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return fqs.size();
}
@Override
public Object getItem(int position) {
return fqs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.item_list,null);
ItemTag itemTag=new ItemTag();
itemTag.tv_name= (TextView) convertView.findViewById(R.id.tv_item_listview_name);
itemTag.tv_content= (TextView) convertView.findViewById(R.id.tv_item_listview_content);
itemTag.tv_tiem= (TextView) convertView.findViewById(R.id.tv_item_listview_time);
convertView.setTag(itemTag);
}
ItemTag itemTag= (ItemTag) convertView.getTag();
itemTag.tv_name.setText(fqs.get(position).getName());
itemTag.tv_content.setText(fqs.get(position).getContent());
itemTag.tv_tiem.setText(fqs.get(position).getTime());
return convertView;
}
}
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) {
//获取网络数据
//1.定义获取网络的数据的路径
String path = "http://192.168.43.149:8080/dataResult.xhtml";
//2.实例化URL
try {
URL url = new URL(path);
//3.获取链接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//4.设置请求
httpURLConnection.setRequestMethod("GET");
//5.设置请求链接超时的时间
httpURLConnection.setConnectTimeout(5000);
//6.获取响应码
int code = httpURLConnection.getResponseCode();
if (code == 200) {
//7.获取返回过来的数据(XML)
InputStream is = httpURLConnection.getInputStream();
//8.使用DOM解析XML文件
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
Document document=documentBuilder.parse(is);
//获取根标签
Element root=document.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("fq");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
//获取属性name
String name = element.getAttribute("name");
//获取子标签content,time
Element elementContent = (Element) element.getElementsByTagName("content").item(0);
String content = elementContent.getTextContent();
Element elementTime = (Element) element.getElementsByTagName("time").item(0);
String time = elementTime.getTextContent();
FQ fq = new FQ(name, content, time);
fqs.add(fq);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return fqs;
}
//获取数据后更新UI
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
progressDialog.cancel();
myadapter.notifyDataSetChanged();
}
}
}
PULL解析代码
public class MainPullActivity extends AppCompatActivity {
private ListView lv_mainpull_list;
private ProgressDialog progressDialog;
private List fqs = new ArrayList<>();
private MyAdapter myadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_pull);
myadapter = new MyAdapter();
lv_mainpull_list = (ListView) findViewById(R.id.lv_mainpull_list);
lv_mainpull_list.setAdapter(myadapter);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("小青正在拼命加載中.....");
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return fqs.size();
}
@Override
public Object getItem(int position) {
return fqs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(MainPullActivity.this).inflate(R.layout.item_list, null);
ItemTag itemTag = new ItemTag();
itemTag.tv_name = (TextView) convertView.findViewById(R.id.tv_item_listview_name);
itemTag.tv_content = (TextView) convertView.findViewById(R.id.tv_item_listview_content);
itemTag.tv_tiem = (TextView) convertView.findViewById(R.id.tv_item_listview_time);
convertView.setTag(itemTag);
}
ItemTag itemTag = (ItemTag) convertView.getTag();
itemTag.tv_name.setText(fqs.get(position).getName());
itemTag.tv_content.setText(fqs.get(position).getContent());
itemTag.tv_tiem.setText(fqs.get(position).getTime());
return convertView;
}
}
public void getPULL(View view) {
new MyTask().execute();
}
class MyTask extends AsyncTask {
private FQ fq;
//获取数据前
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] params) {
//获取网络数据
//1.定义获取网络的数据的路径
String path = "http://192.168.43.149:8080/dataResult.xhtml";
//2.实例化URL
try {
URL url = new URL(path);
//3.获取链接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//4.设置请求
httpURLConnection.setRequestMethod("GET");
//5.设置请求链接超时的时间
httpURLConnection.setConnectTimeout(5000);
//6.获取响应码
int code = httpURLConnection.getResponseCode();
if (code == 200) {
//7.获取返回过来的数据(XML)
InputStream is = httpURLConnection.getInputStream();
//8.解析XML
//使用PULL解析XML文件
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 startTafName=pullParser.getName();
if("fq".equals(startTafName)){
fq = new FQ();
String name=pullParser.getAttributeValue(0);
fq.setName(name);
}else if ("content".equals(startTafName)){
String content=pullParser.nextText();
fq.setContent(content);
}else if ("time".equals(startTafName)){
String time=pullParser.nextText();
fq.setTime(time);
}
break;
case XmlPullParser.END_TAG:
//获取接受标签的名字
String endtagname=pullParser.getName();
if("fq".equals(endtagname)){
fqs.add(fq);
}
break;
}
type=pullParser.next();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return fqs;
}
//获取数据后更新UI
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
progressDialog.cancel();
myadapter.notifyDataSetChanged();
}
}
}
SAX解析代码
public class MainSaxActivity extends AppCompatActivity {
private ListView lv_mainsax_list;
private ProgressDialog progressDialog;
private List fqs = new ArrayList<>();
private MyAdapter myadapter;
private String currentTag = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_sax);
lv_mainsax_list = (ListView) findViewById(R.id.lv_mainsax_list);
myadapter = new MyAdapter();
lv_mainsax_list.setAdapter(myadapter);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("小青正在拼命加載中.....");
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return fqs.size();
}
@Override
public Object getItem(int position) {
return fqs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(MainSaxActivity.this).inflate(R.layout.item_list, null);
ItemTag itemTag = new ItemTag();
itemTag.tv_name = (TextView) convertView.findViewById(R.id.tv_item_listview_name);
itemTag.tv_content = (TextView) convertView.findViewById(R.id.tv_item_listview_content);
itemTag.tv_tiem = (TextView) convertView.findViewById(R.id.tv_item_listview_time);
convertView.setTag(itemTag);
}
ItemTag itemTag = (ItemTag) convertView.getTag();
itemTag.tv_name.setText(fqs.get(position).getName());
itemTag.tv_content.setText(fqs.get(position).getContent());
itemTag.tv_tiem.setText(fqs.get(position).getTime());
return convertView;
}
}
public void getSAX(View view) {
new MyTask().execute();
}
class MyTask extends AsyncTask {
private FQ fq;
//获取数据前
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] params) {
//获取网络数据
//1.定义获取网络的数据的路径
String path = "http://192.168.43.149:8080/dataResult.xhtml";
//2.实例化URL
try {
URL url = new URL(path);
//3.获取链接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//4.设置请求
httpURLConnection.setRequestMethod("GET");
//5.设置请求链接超时的时间
httpURLConnection.setConnectTimeout(5000);
//6.获取响应码
int code = httpURLConnection.getResponseCode();
if (code == 200) {
//7.获取返回过来的数据(XML)
InputStream is = httpURLConnection.getInputStream();
//8.解析XML
//使用SAX解析XML文件
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 ("fq".equals(localName)) {
//实例化对象
fq = new FQ();
String name = attributes.getValue(0);
fq.setName(name);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
currentTag=null;
if ("fq".equals(localName)){
fqs.add(fq);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
if ("content".equals(currentTag)) {
String content = new String(ch, start, length);
fq.setContent(content);
}else if ("time".equals(currentTag)) {
String time = new String(ch, start, length);
fq.setTime(time);
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
return fqs;
}
//获取数据后更新UI
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
progressDialog.cancel();
myadapter.notifyDataSetChanged();
}
}
}
实体类
public class FQ {
private String name;
private String content;
private String time;
public FQ(){}
public FQ(String name, String time, String content) {
this.name = name;
this.time = time;
this.content = content;
}
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;
}
}
public class ItemTag {
public TextView tv_name;
public TextView tv_content;
public TextView tv_tiem;
}
配置文件添加联网权限
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
convert android layout xml,详解Android之解析XML文件三种方式(DOM,PULL,SAX)相关推荐
- mysql mybatis模糊查询语句_详解MyBatis模糊查询LIKE的三种方式
模糊查询也是数据库SQL中使用频率很高的SQL语句,使用MyBatis来进行更加灵活的模糊查询. 直接传参法 直接传参法,就是将要查询的关键字keyword,在代码中拼接好要查询的格式,如%keywo ...
- 设置ngxin服务器虚拟主机,详解Nginx 虚拟主机配置的三种方式(基于端口)
Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 2.Nginx基于端口的虚拟主机配置 如一台服务器只有一个IP或需要通过不同的端口访问不同 ...
- 详解vue路由传参的三种方式
在我们开发vue项目的时候,路由传参几乎是我们必须要用到的,一般出现场景是,当我们点击某个组件的某个按钮时跳转到另一个组件中,并携带参数,便于第二个组件获取数据.下面我就来说说vue路由传参的三种方式 ...
- 一文详解PHP连接MySQL数据库的三种方式
PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO). 1.MySQL扩展 PHP 的 MySQL 扩展是设计开发允许 PH ...
- 视频教程-Android Studio 开发详解-Android
Android Studio 开发详解 1999年开始从事开发工作,具备十余年的开发.管理和培训经验. 在无线通信.Android.iOS.HTML5.游戏开发.JavaME.JavaEE.Linux ...
- python解释器在哪里_详解查看Python解释器路径的两种方式
进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 ...
- sh执行文件 参数传递_详解shell中脚本参数传递的两种方式
方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${ ...
- android 最新写法,详解Android 硬布局item的高级写法
本文主要介绍了Android 硬布局item的高级写法,分享给大家,具体如下: 效果: 这种布局应该是非常常见了,且写的比较多. 今天简单探讨一下效果图中上下两种布局的写法. 比较 上下效果一致 行数 ...
- Android解析XML三种方式(PULL、SAX、DOM)
本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...
- 解析XML三种方式(PULL、SAX、DOM)
本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...
最新文章
- Python中enumerate函数的解释和可视化
- ppp协议pap验证过程状态转移图_电脑网络知识:TCP协议的高级特性,你所不知道的TCP...
- linux中mysql与eclipse_Linux下eclipse CDT及mysql安装,c++访问mysql数据库
- 开放-封闭原则(OCP)
- 不小心合并了icloud通讯录_苹果手机通讯录突然不见了如何恢复呢?
- servlet ---- 请求对象
- Greenplum 模糊查询 实践
- JavaScript(3):JS和Html
- 房友软件注册码暴力输入程序
- 盘点微软出品的神级小工具:无比实用~
- js点击获取短信验证码
- SptingBoot构建电商基础秒杀项目时遇到的问题
- 帝国cms忘记后台帐号密码的处理方法
- 《跟开涛学SpringMVC》学习笔记
- C语言循环语句的研究意义,C语言中循环语句的应用研究
- 【西祠日志】【19】【20】有人说,21天可以养一种习惯
- 【C++】struct结构体/构造函数
- 可视化行程管理app_可视化流量:时间行程,扭矩和时间图
- JavaWeb — 系统结构分析
- 逆向工程实验——pre9(可执行文件的加密MD5碰撞lab)
热门文章
- HTML5添加背景图片
- 「Serial No.」、UDID、IMEI、ICCID
- 关于NSA的EternalBlue(永恒之蓝) ms17-010漏洞利用
- Springboot 接受参数,控制台乱码
- “国家重点实验室”完全名单_洹水泛舟_新浪博客 - Google Chrome
- 交易机制(2007 范建军)
- 谷歌博客:彻底弄懂JavaScript Promise
- adapter 获取每个posion位置推荐,记录RecycleView
- TightVNC H264编解码(三)之去图像抖动
- helm 中共享 tpl 写法