android - XmlPullParser如何获取res/raw/xml/xmlfilename?

标签 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?

最佳答案

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

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

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

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

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

关于android - XmlPullParser如何获取res/raw/xml/xmlfilename?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6079637/

相关文章:

javascript - YouTube IFrame API 播放方法在触摸某些 Android 平板电脑之前不起作用

java - UnsupportedOperationException 打开相机时出错 android

android - 使用 XMLPullParser 解析 XML

android - XmlPullParser 中的 next() 和 nextTag() 有什么区别?

android - 使用 IBM 示例将 Xml 解析为 android ListView

java - XmlPullParser 获取子节点的首选方式?

android - Flutter 如何让 uber 或 ola 像在谷歌地图上移动的汽车图标

android - 带有 fragment 的 PagerView

java - 从一个 Realm 异步复制到另一个 Realm

android - 如何/何时使用 XmlPullParser.require() 方法