1

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

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?

4

1 回答 1

3

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

函数 getResources().getXml() 返回 XmlPullParser 的实现,用于“解析”XML 资源。这不是一个真正的 XML 解析器——事实上,原始 XML 文件是在构建时在构建到您的应用程序之前解析的,而这个“XML 解析器”所做的只是在您调用它的 API 时返回预先消化的 XML 结构. 这是 Android 上最快的“XML”解析器(因为它并不真正解析任何东西),但需要在构建应用程序时编译 XML 文档。

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

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

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

于 2011-05-21T05:23:48.823 回答