XmlPullParser如何获得res / raw / xml / xmlfilename?

时间:2011-05-21 04:44:02

标签: android xmlpullparser

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

在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,我现在不确定要使用它?

1 个答案:

答案 0 :(得分:3)

XmlPullParser实际上不是一个解析器,它是一种解析器的接口,称为“拉”解析器。

函数getResources()。getXml()返回XmlPullParser的实现,用于“解析”XML资源。这不是一个真正的XML解析器 - 实际上原始的XML文件在构建到应用程序之前就已经在构建时进行了解析,而这个“XML解析器”正在做的就是在调用它的API时返回预先消化的XML结构。这是Android上最快的“XML”解析器(因为它不是真正解析任何东西),但要求将XML文档编译为构建应用程序的一部分。

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

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

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