Android xml之dom解析

用dom解析xml文件

步骤如下:

1、创建dom的解析工厂     
2、创建解析xml的dom对象
3、获取文件的元素节点
4、遍历节点,取出元素


第一步:

1.建立一个xml文件


例如:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<infos>
 <city id="1">
 <temperature>20-30度</temperature>
 <wind>南风3-4级</wind>
 <weather>5月20日 多云转阴</weather>
 <name>上海</name>
 <pm>200</pm>
 </city>
 <city id="2">
 <temperature>26-30度</temperature>
 <wind>南风7-8级</wind>
 <weather>5月20日 多云转阴</weather>
 <name>北京</name>
 <pm>800</pm>
 </city>
 <city id="3">
 <temperature>28-33度</temperature>
 <wind>南风5-6级</wind>
 <weather>5月20日 多云转阴</weather>
 <name>四川</name>
 <pm>400</pm>
 </city>
</infos>


第二步:

2.根据xml文件封装自己想要的类

例如:

public class WeatherInfo {


private int id;
private String temperature;
private String wind;
private String weather;
private String name;

private String pm;


public WeatherInfo() {


}


@Override
public String toString() {
return "WeahterInfo [id=" + id + ", temperature=" + temperature
+ ", wind=" + wind + ", weather=" + weather + ", name=" + name
+ ", pm=" + pm + "]";
}


public int getId() {
return id;
}


public void setId(int id) {
this.id = id;
}


public String getTemperature() {
return temperature;
}


public void setTemperature(String temperature) {
this.temperature = temperature;
}


public String getWind() {
return wind;
}


public void setWind(String wind) {
this.wind = wind;
}


public String getWeather() {
return weather;
}


public void setWeather(String weather) {
this.weather = weather;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getPm() {
return pm;
}


public void setPm(String pm) {
this.pm = pm;
}


}


第三步:

3.创建一个类,用于解析xml文件,及为:用dom解析xml文件

例如:

// 用dom解析xml文件
public static List<WeatherInfo> getListInfoForDom(InputStream inputStream)
throws Exception {
List<WeatherInfo> list = new ArrayList<WeatherInfo>();
// 创建dom的解析工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
// weatherinfo的里面的一个对象
Document document = documentBuilder.parse(inputStream);
// 获取文件元素的节点
Element element = document.getDocumentElement();


NodeList cityList = element.getElementsByTagName("city"); // 从一个对象的city开始遍历
// 循环该节点下的所有节点
for (int i = 0; i < cityList.getLength(); i++) {
Element elementCity = (Element) cityList.item(i);
WeatherInfo info = new WeatherInfo();
info.setId(Integer.parseInt(elementCity.getAttribute("id")));


// 获取city下的子节点元素
NodeList childForCityList = elementCity.getChildNodes();
for (int j = 0; j < childForCityList.getLength(); j++) {
if (childForCityList.item(j).getNodeType() == Node.ELEMENT_NODE) {
if ("temperature".equals(childForCityList.item(j)
.getNodeName())) {
info.setTemperature(childForCityList.item(j)
.getFirstChild().getNodeValue());
} else if ("wind".equals(childForCityList.item(j)
.getNodeName())) {
info.setWind(childForCityList.item(j).getFirstChild()
.getNodeValue());
} else if ("weather".equals(childForCityList.item(j)
.getNodeName())) {
info.setWeather(childForCityList.item(j)
.getFirstChild().getNodeValue());
} else if ("name".equals(childForCityList.item(j)
.getNodeName())) {
info.setName(childForCityList.item(j).getFirstChild()
.getNodeValue());
} else if ("pm".equals(childForCityList.item(j)
.getNodeName())) {
info.setPm(childForCityList.item(j).getFirstChild()
.getNodeValue());
}
}
}


list.add(info);
}
return list;
}


第四步:

4.在android中调用即可

例如:

public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.tv_msg);


try {
// 加载本地xml文件
List<WeatherInfo> list = WeatherService
.getListInfoForDom(MainActivity.class.getClassLoader()
.getResourceAsStream("weather.xml"));


StringBuffer sb = new StringBuffer();
for (WeatherInfo info : list) {
String str = info.toString();
sb.append(str);
sb.append("\n\n");
}
textView.setText(sb.toString() + "");
} catch (Exception e) {
// TODO: handle exception
Toast.makeText(this, "解析失败", Toast.LENGTH_LONG).show();
}
}

}


注释:以上代码复制即可使用,

    代码中都标有很清晰的注释,以便于各位进行理解

    但是介意自己动手写,小编也是新手

            有问题可留言。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值