DOM方式解析xml文件1(解析网路xml)

其实网上很多资料讲关于解析xml的问题,大多数我都看的一知半解,今天终于找了个不错的例子,放在这里跟大家共享:
先上代码:
1.DomParseXml.java文件

package cn.com;

import java.io.File;
import java.io.InputStreamReader;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class DomParseXml extends Activity implements OnClickListener {

File fl;

//这个地址返回的内容的xml文件我下面会贴上
//大家可以先跳过这个java文件看下xml文件结构
private final String net = "http://www.google.com/ig/api?hl=zh-cn&weather=";

private String addr;

ListView lv;

ArrayAdapter<String> adapter;

private EditText et;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button bt = (Button) findViewById(R.id.bt);

bt.setOnClickListener(this);
//输入一个城市(wuhan或beijing等)
et = (EditText) findViewById(R.id.et);

}

@Override
public void onClick(View agr0) {

// TODO Auto-generated method stub

addr = et.getText().toString();

switch (agr0.getId()) {

case R.id.bt:
// 获取输入的内容,取出空格
if (!addr.trim().equals("")) {

addr = net + addr;
// System.out.println(addr);

String[] data = null;
// 将weather设置为根节点
// Node nRoot = root(addr,"weather").item(0);
// 这里返回的是一个NodeList
Node nRoot = root(addr, "forecast_information").item(0);
// 获得孩子结点
NodeList child = nRoot.getChildNodes();
// 获得子节点的个数 7
int childSize = child.getLength();
System.out.println("**********childSize************"
+ childSize);

data = new String[childSize];

for (int i = 0; i < childSize; i++) {
// 第一个子节点,city
Node nChild = child.item(i);
// 获得子节点
if (nChild.hasAttributes()) {
// 获得节点属性
data[i] = nChild.getAttributes().getNamedItem("data")
.getNodeValue();
System.out.println("**********************" + data[i]);

}
}
}
setTitle(et.getText().toString()); // 显示查询的城市
break;
}
}

private NodeList root(final String url, final String str) {

NodeList root = null;

try {

InputSource is = new InputSource(new InputStreamReader(new URL(url)
.openStream()));

DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();

DocumentBuilder dom = factory.newDocumentBuilder();

Document doc = dom.parse(is);

root = doc.getElementsByTagName(str);

} catch (Exception e) {

e.printStackTrace();

}

return root;

}

}


2.main.xml文件内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<EditText android:text="" android:id="@+id/et"
android:layout_width="150dp" android:layout_height="wrap_content"></EditText>
<Button android:text="button" android:id="@+id/bt"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>


3.每次都强调下的一条:

<uses-permission android:name="android.permission.INTERNET">
</uses-permission>

另外我经常遇到在启动模拟器的时候那个模拟器连不上互联网,那个右上角的信号图标是个叉,我也不知道怎么修改,重新启动了下模拟器后就又可以联网了.不知道是什么原因,我们这种联网的应用如果在测试的时候没有注意到这的话,程序就会报错,说:
can't reach the host之类的,哪位兄弟姐妹知道是什么原因的话,麻烦告知一下,谢谢
另外附上查询到的xml文件:

<?xml version="1.0" ?>
- <xml_api_reply version="1">
- <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
- <forecast_information>
<city data="Beijing, Beijing" />
<postal_code data="beijing" />
<latitude_e6 data="" />
<longitude_e6 data="" />
<forecast_date data="2010-07-01" />
<current_date_time data="2010-07-02 00:00:00 +0000" />
<unit_system data="SI" />
</forecast_information>
- <current_conditions>
<condition data="晴" />
<temp_f data="73" />
<temp_c data="23" />
<humidity data="湿度: 83%" />
<icon data="/ig/images/weather/sunny.gif" />
<wind_condition data="风向: 北、风速:4 米/秒" />
</current_conditions>
- <forecast_conditions>
<day_of_week data="周四" />
<low data="21" />
<high data="33" />
<icon data="/ig/images/weather/chance_of_rain.gif" />
<condition data="可能有雨" />
</forecast_conditions>
- <forecast_conditions>
<day_of_week data="周五" />
<low data="22" />
<high data="33" />
<icon data="/ig/images/weather/sunny.gif" />
<condition data="晴" />
</forecast_conditions>
- <forecast_conditions>
<day_of_week data="周六" />
<low data="24" />
<high data="33" />
<icon data="/ig/images/weather/mostly_sunny.gif" />
<condition data="以晴为主" />
</forecast_conditions>
- <forecast_conditions>
<day_of_week data="周日" />
<low data="21" />
<high data="35" />
<icon data="/ig/images/weather/mostly_sunny.gif" />
<condition data="晴间多云" />
</forecast_conditions>
</weather>
</xml_api_reply>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值