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());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章