我是编程新手,所以如果我在下面的段落中写错了,请先纠正我:

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>");


在最后一行:我希望能够要求解析器转到文件,而不是将字符串传递给该文件。我该怎么办?
我不确定如何使用this posting
getResources()。getXml()是否假设我使用的是我现在不确定使用的Android pullParser?

最佳答案

XmlPullParser并不是真正的解析器,它是一种解析器的接口,称为“拉”解析器。

函数getResources()。getXml()返回XmlPullParser的实现,用于“解析” XML资源。这不是真正的XML解析器-实际上,原始XML文件是在构建时进行解析的,然后再构建到您的应用中,而这种“ XML解析器”所做的只是返回预先消化的XML结构,就像您调用其API一样。这是Android上最快的“ XML”解析器(因为它实际上没有解析任何内容),但是要求将XML文档编译为构建应用程序的一部分。

您从XmlPullParserFactory.newInstance()获得的XmlPullParser的另一个实现不受“限制”-此实现功能齐全,并且可以解析您提供给它的任何原始XML文档。

至少一次(不确定是否仍然如此),SAX解析器和XmlPullParserFactory.newInstance()返回的解析器实际上都建立在相同的基础实现上,即expat。 expat解析器是“推送”解析器(与SAX相同的模型),因此使用它的最有效方法是使用SAX API。 XmlPullParser版本具有SAX的更多开销,因为它需要将基础的推送语义转换为Pull接口。

如果有帮助,则push意味着将解析后的数据推送给您(您实现的回调会为您提供每个标签和其他文档元素),而pull则意味着您调用解析器以检索每个元素。

10-04 19:12