/*
 * 解析XML的三种方法:
 * 1.SAX      事件驱动   不是一次性加载到内存
 * 2.DOM      一次加载到内存,性能较差   适合服务器端编程
 * 3.XmlPull  适应嵌入式设备,占用内存较小   API相对简单
 */


Android:解析XML的三种方法XmlPull、SAX、DOM一、XMLpull()

private void XMLpull()//根据标签一个一个判断,是找到对应索引的数据,否判断下一个标签
    {
        try
        {
            AssetManager assets = getAssets();
            InputStream is = assets.open("testxml.xml");
            XmlPullParser pullParser = Xml.newPullParser();
            pullParser.setInput(is,"utf-8");
            int eventType = pullParser.getEventType();//得到节点
            while(eventType != XmlPullParser.END_DOCUMENT)//XML是否读取结束
            {
                if(eventType == XmlPullParser.START_TAG)//是否标签开始
                {
                   String name = pullParser.getName();
                   if("TextView".equals(name))
                   {
                       String string = pullParser.getAttributeName(3);//根据索引位置读取数据
                       Toast.makeText(this, "TextView是:" + string, Toast.LENGTH_LONG).show();
                   }
                }
                eventType = pullParser.next();//进入下一个标签
            }
                                           
                                           
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        catch (XmlPullParserException e)
        {
            e.printStackTrace();
        }
    }


其他方法:

1.SAX:

private void btnSAX()
    {
        SAXxml("testxml.xml","Title","android:text");
                       
    }
    private void SAXxml(String FileName, final String label, final String attr)
    {
        try
        {
            SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
            AssetManager asset = getAssets();
            InputStream is = asset.open(FileName);//找到asset的xml文件
            DefaultHandler dh = new DefaultHandler()
            {
                @Override
                public void startElement(String uri, String localName,
                        String qName, Attributes attributes)
                        throws SAXException
                {
                    if(label.equals(localName))//找到标签
                    {
                        String value = attributes.getValue(attr);//找到key
                        mTextView.setText(value);
                    }
                    super.startElement(uri, localName, qName, attributes);
                }
            };
            parser.parse(is, dh);
        }
        catch (ParserConfigurationException e)
        {
            e.printStackTrace();
        }
        catch (SAXException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }



2.dom:

protected void dom()
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try
        {
            DocumentBuilder builder = factory.newDocumentBuilder();
            AssetManager assets = getAssets();
            InputStream is = assets.open("activity_main.xml");
            Document douDocument = builder.parse(is);//解析所有内容到容器内
            NodeList root = douDocument.getChildNodes();
            for (int i = 0; i < root.getLength(); i++)//三层结构,根据xml文件结构确定
            {
                Node node = root.item(i);
                NodeList nodes = node.getChildNodes();
                for (int j = 0; j < nodes.getLength(); j++)
                {
                    Node item = nodes.item(j);
                    if ("LinearLayout".equals(item.getNodeName()))
                    {
                        NodeList nodes2 = item.getChildNodes();
                        for (int k = 0; k < nodes2.getLength(); k++)
                        {
                            Node item2 = nodes2.item(k);
                            if ("Button".equals(item2.getNodeName()))
                            {
                                Element ele = (Element) item2;
                                String width = ele
                                        .getAttribute("android:layout_width");
                                Toast.makeText(MainActivity.this,
                                        "Button宽度是: " + width,
                                        Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                }
            }
        } catch (ParserConfigurationException e)
        {
            e.printStackTrace();
        } catch (SAXException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }