dom方式解析xml(2)

Dom解析xml文件,针对于格式不规范的xml文件,元素既包含属性(eg:id)又包含子元素的情况

///xml文件

<persons>
<person id="20" >
        <name>huang</name>
        <age>24</age>
<sex>男</sex>
    </person>


    <person id="23" age="30" name="xiao" nativePlace="北京"/>

    
</persons>

///person类

public class Person {
private int id;
private String name;
private int age;
private String sex;
private String nativePlace;

///解析过程

TextView textView=(TextView) findViewById(R.id.textView);

List<Person> list=new ArrayList<Person>();
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//获得sdcard路径
String sdcardPath=Environment.getExternalStorageDirectory().getPath();
//获得要解析的文件
File personFile=new File(sdcardPath+"/persons2.xml");

if(personFile.exists()){
//得到文件建造工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

try {
//得到建造器
DocumentBuilder builder;

builder = factory.newDocumentBuilder();

//加载personFile.xml为document文件,来解析
Document document = builder.parse(personFile);
//获得根节点persons



Element root = document.getDocumentElement();
//获得根节点的所有子节点
NodeList nodes = root.getChildNodes();

//遍历集合,获得每一个子节点
for(int i=0;i<nodes.getLength();i++){

Node n = nodes.item(i);
//判段当前节点是不是元素节点
if(n.getNodeType()==Node.ELEMENT_NODE){
Person p=new Person();//创建person对象,收集数据
Element ele=(Element) n;//某一个person节点
//获得person节点的属性
String id = ele.getAttribute("id");
String name = ele.getAttribute("name");
String age = ele.getAttribute("age");
String sex = ele.getAttribute("sex");
String nativePlace = ele.getAttribute("nativePlace");
//如果属性不为空,就封装
if(!id.equals("")){
p.setId(Integer.parseInt(id));
}
if(!name.equals("")){
p.setName(name);
System.out.println(name);
}
if(!age.equals("")){
p.setAge(Integer.parseInt(age));
}
if(!sex.equals("")){
p.setSex(sex);
}
if(!nativePlace.equals("")){
p.setNativePlace(nativePlace);
}

//获得当前person的子节点
NodeList pNodes= ele.getChildNodes();
//循环遍历当前person的每一个子节点
for(int j=0;j<pNodes.getLength();j++){
Node item = pNodes.item(j);
//判段当前节点item是不是元素节点
if(item.getNodeType()==Node.ELEMENT_NODE){
Element element=(Element) item;
//获得文本节点的值
String value = element.getFirstChild().getNodeValue();
//根据节点名字封装相应的值
if(element.getNodeName().equals("id")){
p.setId(Integer.parseInt(value));
}else if(element.getNodeName().equals("name")){
p.setName(value);
System.out.println(value);
}else if(element.getNodeName().equals("age")){
p.setAge(Integer.parseInt(value));
}else if(element.getNodeName().equals("sex")){
p.setSex(value);
}else if(element.getNodeName().equals("nativePlace")){
p.setNativePlace(value);
}

}
}
//把person对象添加到集合
list.add(p);

}

}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

 

 
}

}else{
Toast.makeText(MainActivity.this, "sdcard不存在", 0).show();
}

textView.setText(list.toString());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值