Dom解析xml文件(3)

Dom解析xml文件,針對於有兩層集合的xml文件(eg:一個集合裏面包含多個人對象,人對象裏面有多個地址信息)

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

ListView listView=(ListView) findViewById(R.id.listView1);
List<Person> list=new ArrayList<Person>();

//判斷sdcard是否處於掛載狀態
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//獲得sdcard路徑
String path = Environment.getExternalStorageDirectory().getPath();
//得到要解析的文件
File personFile=new File(path+"/persons3.xml");

if(personFile.exists()){
//獲得文件建造工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//獲得建造器
DocumentBuilder builder = factory.newDocumentBuilder();
try {
//把personFile.xml加載成document文檔,來解析
Document document = builder.parse(personFile);
//獲得document文檔的根元素
Element ele = document.getDocumentElement();
//獲得document文檔根元素的所有子元素
NodeList nodes = ele.getChildNodes();

//遍歷集合,獲得每一個子元素,即每一個Person
for(int i=0;i<nodes.getLength();i++){
Node node = nodes.item(i);

//判斷元素狀態
if(node.getNodeType()==Node.ELEMENT_NODE){
Person p=new Person();
int id=0;
String name=null;
int age=0;
String area=null;
String detail=null;

Element n=(Element) node;
String id_ = n.getAttribute("id");
id=Integer.parseInt(id_);
p.setId(id);
//獲得當前元素下的子元素,即name、age、address
NodeList nodes2 = n.getChildNodes();
for(int j=0;j<nodes2.getLength();j++){
Node item = nodes2.item(j);
if(item.getNodeType()==Node.ELEMENT_NODE){
Element element=(Element) item;
String value = element.getFirstChild().getNodeValue();
if(element.getNodeName().equals("name")){
name=value;
p.setName(value);
}else if(element.getNodeName().equals("age")){
p.setAge(Integer.parseInt(value));
age=Integer.parseInt(value);
}else if(element.getNodeName().equals("address")){
//如果是address節點,就獲取其子節點,獲得所有住址
NodeList addrs = element.getChildNodes();
for(int x=0;x<addrs.getLength();x++){
Node addr = addrs.item(x);
if(addr.getNodeType()==Node.ELEMENT_NODE){
Element ele_addr=(Element) addr;
//獲得區和樓房號
NodeList areas = ele_addr.getChildNodes();
for(int y=0;y<areas.getLength();y++){
Node node_area = areas.item(y);
if(node_area.getNodeType()==Node.ELEMENT_NODE){
Element ele_area=(Element) node_area;
String value2 = ele_area.getFirstChild().getNodeValue();
if(ele_area.getNodeName().equals("area")){
area=value2;
p.setArea(value2);
}else if(ele_area.getNodeName().equals("detail")){
p.setDetail(value2);
detail=value2;
}

}
}
}
}
}

}
}
list.add(p);
//MyHelper helper=new MyHelper(MainActivity.this, "MySQLite", null, 1);
//SQLiteDatabase sdb = helper.getReadableDatabase();
//sdb.execSQL("insert into user values(?,?,?,?,?)",new Object[]{id,name,age,area,detail});
}
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// textView.setText(list.toString());

listView.setAdapter(new MyAdapter(MainActivity.this,list));


/////////////////////////////////////////////////////////////xml文件//////////////////////////////////////////////////////////////////////////////////////////////

<persons>
    <person id="23" >
<age>30</age>
        <name>lee</name>
<address>
<addr>
<area>海淀</area>
<detail>八維7棟110</detail>
</addr>
<addr>
<area>西城</area>
<detail>天安門112</detail>
</addr>
</address>
    </person>
    <person id="20"      >
        <name>leo</name>
        <age>24</age>
<address>
<addr>
<area>海淀</area>
<detail>八維7棟111</detail>
</addr>
<addr>
<area>西城</area>
<detail>天安門111</detail>
</addr>
</address>
    </person>
</persons>


/////////////////////////////////////////////////////////////Person類//////////////////////////////////////////////////////////////////////////////////////////////

public class Person {
private int id;
private String name;
private int age;
private String area;
private String detail;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章