安卓2种XML解析:Pull和DOM解析

1、     xmlPullparser解析

private void paserPull() {
try {
//获取pull解析器
pullParser = Xml.newPullParser();
//获取到解析的流文件
InputStream open = getAssets().open("data.xml");
//把解析的文件放到解析器中
pullParser.setInput(open,"utf-8");
//获取到移动的指针
int type = pullParser.getEventType();
//只要不是文档结束就执行解析
while (type!=XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_DOCUMENT://文档开始的时候
//不需要操作
break;
case XmlPullParser.START_TAG://文档开始的时候
if ("persons".equals(pullParser.getName())) {
list = new ArrayList();
}else if ("person".equals(pullParser.getName())) {
person = new Person();
//如果是person节点,取出这个节点中的额属性,,,存放到对象中
String idString = pullParser.getAttributeValue(0);
person.setId(Integer.parseInt(idString));
}else if ("name".equals(pullParser.getName())) {
String nameString = pullParser.nextText();
person.setName(nameString);
}else if ("age".equals(pullParser.getName())) {
String stringAge = pullParser.nextText();
person.setAge(stringAge);
}
break;
case XmlPullParser.END_TAG://解析结束
if ("person".equals(pullParser.getName())) {
list.add(person);
//为了进行下一次循环
person=null;
}
break;

default:
break;
}
type=pullParser.next();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("aaa", list.toString());
}

2、DOM解析


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 解析
        parseDOM();
    }

    private void parseDOM() {
        List list = new ArrayList();
        try {
            // 1.获取要解析的xml文档的流文件
            InputStream dom = getAssets().open("data.xml");
            // 2.获取到一个解析工厂
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory
                    .newInstance();
            // 3.通过解析工厂获取到一个解析器
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
            // 4.把需要解析的流文件放到解析器中
            Document parse = builder.parse(dom);
            // 5.获取到根节点
            Element element = parse.getDocumentElement();
            // 6.获取到所有的子节点
            NodeList childNodes = element.getChildNodes();
            // 7.遍历所有的子节点
            for (int i = 0; i < childNodes.getLength(); i++) {
                // 8.获取到每个子节点
                Node child_node = childNodes.item(i);
                // 9.创建对象
                Person person = new Person();
                // 10.判断获取到的每个子节点类型是否是元素节点类型
                if (child_node.getNodeType() == Node.ELEMENT_NODE) {
                    // 11.如果是这个类型,就强转成一个元素
                    Element child_el = (Element) child_node;
                    // 12.获取到里面的属性
                    String idString = child_el.getAttribute("id");
                    person.setId(Integer.parseInt(idString));
                    // 13.再获取到下面的每个子节点
                    NodeList childNodes2 = child_el.getChildNodes();
                    // 14.继续遍历这些子节点
                    for (int j = 0; j < childNodes2.getLength(); j++) {
                        // 15.获取到每个子节点
                        Node item = childNodes2.item(j);
                        // 16.拿到每个子节点,进行判断
                        if (item.getNodeType() == Node.ELEMENT_NODE) {
                            // 17.强转
                            Element el = (Element) item;
                            if (el.getNodeName().equals("name")) {// 获取到的是一个name属性
                                // 把节点里面的值通过set方法给person对象
                                person.setName(el.getFirstChild()
                                        .getNodeValue());
                            } else if (el.getNodeName().equals("age")) {// 获取到的是一个age属性
                                person.setAge(el.getFirstChild().getNodeValue());
                            }
                        }
                    }
                    // 添加到集合
                    list.add(person);
                }
            }
            Log.i("aaa", list.toString());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}



你可能感兴趣的:(Demo)