convert android layout xml,详解Android之解析XML文件三种方式(DOM,PULL,SAX)

1.xml文件代码

${fq.content}

${fq.time}

2.XML网页效果图

b137e763ae42cfcf28f9c82e25f264cc.png

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;

}

配置文件添加联网权限

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值