Android DOM 解析 XML

openkk 12年前發布 | 45K 次閱讀 Android Android開發 移動開發

Android DOM 解析 XML

res/raw/person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="001">
        <name>張三</name>
        <age>22</age>
    </person>

    <person id="002">
        <name>李四</name>
        <age>23</age>
    </person>

    <person id="003">
        <name>王五</name>
        <age>24</age>
    </person>
</persons>

DomParse.java

public class DomParse {
    public static List<Person> parse(InputStream  inputStream){
        List<Person> persons=new ArrayList<Person>();
        try {
            //創建解析器
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder=factory.newDocumentBuilder();
            Document dom = builder.parse(inputStream);
            //得到根節點,
            Element root = dom.getDocumentElement();
            //查找所有persons節點,
            NodeList pNodes = root.getElementsByTagName("person");
            //**********************遍歷所有person節點**********************
            for (int i = 0; i < pNodes.getLength(); i++) {
                Person person = new Person();
                //得到第一個person節點
                Element pNode = (Element) pNodes.item(i);
                //獲取person節點的id屬性值
                person.setId(new Integer(pNode.getAttribute("id")));
                //獲取person節點下的所有子節點
                NodeList cNodes = pNode.getChildNodes();
                //**********************遍歷person節點下的所有子節點**********************
                for (int j = 0; j < cNodes.getLength(); j++) {
                    Node node = (Node) cNodes.item(j);
                    //判斷是否為元素類型
                    if(node.getNodeType() == Node.ELEMENT_NODE){
                        Element cNode = (Element) node;
                        //判斷是否為name和age元素
                        if ("name".equals(cNode.getNodeName())) {
                                   person.setName(cNode.getFirstChild().getNodeValue());
                        }else if ("age".equals(cNode.getNodeName())) {
                                    person.setAge(new Short(cNode.getFirstChild().getNodeValue()));
                        }
                    }
                }
                persons.add(person);
            }
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return persons;
    }
}
在主類中調用:

public class TestActivity extends Activity {
    Button btn;
    ListView listView;
    List<String> list=new ArrayList<String>();
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn=(Button) findViewById(R.id.button);
        listView=(ListView) findViewById(R.id.listView);
        btn.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0) {
                InputStream inputStream=getResources().openRawResource(R.raw.person);
                List<Person>persons = DomParse.parse(inputStream);
                for (Iterator iterator = persons.iterator(); iterator.hasNext();) {
                    Person person = (Person) iterator.next();
                    list.add(String.valueOf("ID:"+person.getId()) + " 姓名: "
                            + person.getName() + " 年齡: " + person.getAge());
                }
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                        getApplicationContext(),
                        android.R.layout.simple_list_item_1,
                        list);
                listView.setAdapter(adapter);
            }
        });
    }
}



 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!