【问题标题】:How to parse a xml from project resources android如何从项目资源android解析xml
【发布时间】:2012-03-15 18:57:38
【问题描述】:

我在 res/xml 文件夹中有一个 XML 文件 (config.xml),我需要解析这个 XML。 为此,我使用 SAXParser。我正在尝试这种方式:

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
          //handler definition...
};
Uri configUri = Uri.parse("android.resource://myPackageName/" + R.xml.config);
saxParser.parse(configXML.toString(), handler);

但这不起作用...

解析方法有以下参数:

uri 要解析的内容的位置。

dh 要使用的 SAXDefaultHandler。

我应该使用 URI 还是 Uri?有什么区别?

【问题讨论】:

  • 您可以使用XmlResourceParser 而不是SAXParser 来解析资源

标签: android xml parsing uri


【解决方案1】:

我在 res/xml 文件夹中有一个 XML 文件 (config.xml),我需要解析这个 XML

致电getResources().getXml(R.xml.config)。您将收到一个XmlResourceParser,它遵循XmlPullParser API。如XmlPullParser JavaDocs 所示,您将得到如下代码:

     XmlResourceParser xpp=getResources().getXml(R.xml.config);
     int eventType = xpp.getEventType();

     while (eventType != XmlPullParser.END_DOCUMENT) {
       if (eventType == XmlPullParser.START_DOCUMENT) {
           // do something
       } else if (eventType == XmlPullParser.START_TAG) {
           // do something
       } else if (eventType == XmlPullParser.END_TAG) {
           // do something
       } else if (eventType == XmlPullParser.TEXT) {
           // do something
       }
      eventType = xpp.next();
     }

 

为此,我使用 SAXParser

即使你可以让它工作,它也会比使用 XmlResourceParser 慢约 10 倍。

【讨论】:

  • @CommonsWare - 是否有可能(应用程序内的运行时)获得 AXML(已编译 XML)布局的完整二进制数据?
  • @Ωmega:我不知道有一个,但我也没有找过。
  • @CommonsWare - 如果你不知道,那么谁知道呢? :)) 如果您找到方法,请告诉我。谢谢!
  • @Ωmega:“如果你不知道,那谁知道呢?” ——也许是对应用程序进行反编译的人。虽然想到了一种可能性:在Resources 上尝试openRawResource()。虽然名称表明它用于原始资源,但我看到其他 SO 答案显示它用于其他资源类型。如果您将布局资源 ID 传递给它,您可能会在已编译资源上获得 InputStream
  • @CommonsWare - 我希望你知道如何从XmlResourceParser 类的getXml() 获取这些数据。
猜你喜欢
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
相关资源
最近更新 更多