XmlPullParser как получить res / raw / xml / xmlfilename? - PullRequest
1 голос
/ 21 мая 2011

Я новичок в программировании, поэтому для начала исправлю меня, если я ошибаюсь в параграфе ниже:

В Android есть в основном три xml-анализатора: Sax, Dom и XmlPullParser.Этот последний вариант, хотя и существует как внешний ресурс.Находится «в ядре» Android, поэтому работает быстрее, но функциональные возможности ограничены

Хорошо, вот мой вопрос. Я немного изменил код, указанный в ссылке ниже

http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

Я сделал следующее:

import java.io.IOException;
import java.io.StringReader; 
import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory; 

public class xmlPParser
{   

    public String texte;
    public xmlPParser (String arg)         
      throws XmlPullParserException, IOException     
    {
         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();
         xpp.setInput( new StringReader ( arg ) );
         int eventType = xpp.getEventType();



         while (eventType != XmlPullParser.END_DOCUMENT)
       {
            //if(eventType == XmlPullParser.START_DOCUMENT) { System.out.println("Start document");} 
       // else if(eventType == XmlPullParser.START_TAG) { System.out.println("Start tag "+xpp.getName()); } 
        //else if(eventType == XmlPullParser.END_TAG) {  System.out.println("End tag "+xpp.getName()); }
        if(eventType == XmlPullParser.TEXT){ texte = xpp.getText();  }    //{ System.out.println("Text "+xpp.getText());}          

        eventType = xpp.next();
            }         

         //System.out.println("End document");
         } 

        public String getTexte()
        {
            String returnTexte = texte;
            return returnTexte;
        }

} 

В другом Java-файле я могу вызвать синтаксический анализатор следующим образом:

public xmlPParser myxpp;

...

myxpp = new xmlPParser("<foo>Hi five !!</foo>");

В этой последней строке: я бы хотел попросить парсер перейти к файлу, а не передавать ему строку.как бы я это сделал?Я не уверен, как использовать это сообщение Предполагается ли, что getResources (). GetXml () использует Android pullParser, который я не уверен, что буду использовать сейчас?

1 Ответ

3 голосов
/ 21 мая 2011

XmlPullParser на самом деле не является синтаксическим анализатором, это интерфейс к типу синтаксического анализатора, называемого синтаксическим анализатором «pull».

Функция getResources (). GetXml () возвращает реализацию XmlPullParser для «синтаксического анализа»."Ресурсы XML.Это не настоящий синтаксический анализатор XML - фактически исходный XML-файл был проанализирован во время сборки, прежде чем он был встроен в ваше приложение, и то, что делает этот «синтаксический анализатор XML», просто возвращает предварительно переваренную структуру XML при вызове его API,Это самый быстрый анализатор XML, доступный на Android (потому что он ничего не анализирует), но требует, чтобы документ XML был скомпилирован как часть построения вашего приложения.

Другая реализация XmlPullParser, которую вы получаетеиз XmlPullParserFactory.newInstance () не является «ограниченным» - эта реализация является полнофункциональной и может анализировать любой необработанный XML-документ, который вы ему даете.

По крайней мере, за один раз (не уверен, что это все ещеслучай), и синтаксический анализатор SAX, и синтаксический анализатор, возвращаемый XmlPullParserFactory.newInstance (), фактически построены на одной базовой реализации, которая является экспатом.Синтаксический анализатор представляет собой синтаксический анализатор «push» (то же самое, что и SAX), поэтому наиболее эффективным способом его использования является использование SAX API.Версия XmlPullParser имеет некоторые дополнительные издержки от SAX, поскольку ей необходимо превратить базовую семантику push в интерфейс pull.

Если это помогает - push означает, что он передает вам проанализированные данные (обратные вызовы, которые вы реализуете, дают вамкаждый тег и другой элемент документа), в то время как pull означает, что вы вызываете синтаксический анализатор для извлечения каждого элемента.

...