第2章 
    使用DOM读取XML文件
    除了可以使用 SAX解析XML文件,大家也可以使用熟悉的DOM来解析XML文件。 DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。
    import l.domain.Person;
    /** 使用Dom解析xml文件
    */
    public class DomXMLReader {
    public static List<Person> readXML(InputStream inStream) {
        List<Person> persons = new ArrayList<Person>();
        DocumentBuilderFactory factory = wInstance();
        try {
            DocumentBuilder builder = wDocumentBuilder();
            Document dom = builder.parse(inStream);
            Element root = DocumentElement();
            NodeList items = ElementsByTagName("person");//查所有person节点
            for (int i = 0; i < Length(); i++) {
                Person person = new Person();
                //得到第一个person节点
                Element personNode = (Element) items.item(i);
                //获取person节点的id属性值
                person.setId(new Attribute("id")));
                //获取person节点下的所有子节点(标签之间的空白节点和name/age元素)
                NodeList childsNodes = ChildNodes();
                for (int j = 0; j < Length(); j++) {
                Node node = (Node) childsNodes.item(j);
                //判断是否为元素类型
        NodeType() == Node.ELEMENT_NODE){    Element childNode = (Element) node;
                                            //判断是否name元素
                    if ("name".NodeName())) {
                    //获取name元素下Text节点,然后从Text节点获取数据                        person.FirstChild().getNodeValue());
                    } else if (“age”.NodeName())) {
                person.setAge(new FirstChild().getNodeValue()));
                    }
                }
                    }
                persons.add(person);
            }
            inStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return persons;
    }
    使用Pull解析器读取XML文件
    除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用Text()方法可以获取下一个Text类型元素的值。
    public class PullXMLReader {
    public static List<Person> readXML(InputStream inStream) {
        XmlPullParser parser = wPullParser();
        try {
        parser.setInput(inStream, "UTF-8");
        int eventType = EventType();
        Person currentPerson = null;
        List<Person> persons = null;
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
            case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理
                persons = new ArrayList<Person>();
                break;
            case XmlPullParser.START_TAG://开始元素事件
                String name = Name();
                if (name.equalsIgnoreCase("person")) {
                    currentPerson = new Person();
                    currentPerson.setId(new AttributeValue(null, "id")));
                } else if (currentPerson != null) {
                    if (name.equalsIgnoreCase("name")) {
                currentPerson.Text());// 如果后面是Text元素,即返回它的值
                    } else if (name.equalsIgnoreCase("age")) {
                        currentPerson.setAge(new Text()));
                    }
                }
                break;
                case XmlPullParser.END_TAG://结束元素事件
                if (Name().equalsIgnoreCase("person") && currentPerson != null) {
                    persons.add(currentPerson);
                    currentPerson = null;
                }
                break;
            }
            eventType = ();
        }
spring boot原理流程        inStream.close();
        return persons;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。