Android XMLデータの解析

インターネットでデータをダウンロードするための2つの主要な形式があります。XMLとJSONですが、これら2つのデータ形式には独自の形式文字があります。データを解析すると、2つの形式から必要なデータが抽出され、形式文字が削除されます。この記事では、2つの一般的なXML解析方法について説明します。

JSONデータの解析方法:http : //blog.csdn.net/q296264785/article/details/53909442

XMLデータ分析のPULL分析方法一般的に使用される方法:

private void XMLWithPull(String xmlData){//XML数据解析 pull方式
        try {
            //1、获得一个XmlPullParserFactory实例
            XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
            //2、通过XmlPullParserFactory实例得到XmlPullParser对象
            XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();
            //3、加载需要解析的数据
            xmlPullParser.setInput(new StringReader(xmlData));r
            //得到当前解析事件
            int eventType = xmlPullParser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            //如果解析事件不等于END_DOCUMENT,说明解析还没完成,需要继续解析
            while(eventType != XmlPullParser.END_DOCUMENT){
                //获得当前解析节点的名字
                String nodeName = xmlPullParser.getName();
                switch (eventType){
                    case XmlPullParser.START_TAG:
                        if("id".equals(nodeName)){
                            id = xmlPullParser.nextText();//获取节点的内容并且赋值到对应变量
                        }else if("name".equals(nodeName)){
                            name = xmlPullParser.nextText();
                        }else if("version".equals(nodeName)){
                            version = xmlPullParser.nextText();
                        }
                        break;
                    //解析完一个节点后将数据输出
                    case XmlPullParser.END_TAG:
                        if("app".equals(nodeName)){
                            Log.d("MainActivity", "id is " + id);
                            Log.d("MainActivity", "name is " + name);
                            Log.d("MainActivity", "version is " + version);
                        }
                        break;
                    default:break;
                }
                //切换到下一个节点
                eventType = xmlPullParser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }

    }

一般的なメソッドを解析するXMLデータの
SAX解析メソッド:SAX解析メソッドは、DefaultHandlerのサブクラスを実装し、関連するメソッドを書き換える必要があります。メソッドの役割は、プル分析に対応して理解できます。

public class ContentHandler extends DefaultHandler {
    private String nodeName;
    private StringBuilder id;
    private StringBuilder name;
    private StringBuilder version;

    @Override
    public void startDocument() throws SAXException {//开始解析XML的时候调用
        id = new StringBuilder();
        name = new StringBuilder();
        version = new StringBuilder();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//开始解析某个节点的时候调用
         nodeName = localName;
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {//获取节点中内容的时候调用
        if("id".equals(nodeName)){
            id.append(ch, start, length);
        }else if("name".equals(nodeName)){
            name.append(ch, start, length);
        }else if("version".equals(nodeName)){
            name.append(ch, start, length);
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {//完成某个节点的时候调用
        if("app".equals(localName)){
            Log.d("MainActivity", "id is " + id.toString().trim());
            Log.d("MainActivity", "name is " + name.toString().trim());
            Log.d("MainActivity", "version is " + version.toString().trim());
            id.setLength(0);
            name.setLength(0);
            version.setLength(0);
        }
    }

    @Override
    public void endDocument() throws SAXException {//完成整个解析的时候调用
        super.endDocument();
    }
}

DefaultHandlerサブクラスをインスタンス化し、関連するメソッドの割り当てを通じてデータを解析します。

private void XMLWithSAX(String xmlData){
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            XMLReader xmlReader = factory.newSAXParser().getXMLReader();
            ContentHandler contentHandler = new ContentHandler();
            xmlReader.setContentHandler(contentHandler);
            xmlReader.parse(new InputSource(new StringReader(xmlData)));
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

解析されたXMLターゲットデータ:

<apps>
<app>
<id>1</id>
<name>aa</name>
<version>1.0</version>
</app>
<app>
<id>2</id>
<name>Hello</name>
<version>1.2</version>
</app>
<app>
<id>3</id>
<name>bb</name>
<version>1.8</version>
</app>
</apps>
元の記事34件を公開 10のような 30,000以上の訪問

おすすめ

転載: blog.csdn.net/q296264785/article/details/53897107