【问题标题】:XmlPullParser get file from filesystemXmlPullParser 从文件系统获取文件
【发布时间】:2013-03-19 20:36:57
【问题描述】:

我在 Android 文件系统中的应用程序创建者 xml 文件。我需要使用 XmlPullParser 解析此文件,但编译时出现错误:“变量解析器可能尚未初始化”。我的代码:

InputStream inputStream = openFileInput("settings.xml");
XmlPullParser parser;
parser.setInput(inputStream, null);

不知道如何修复它。我使用 Intellij IDEA12 和 Android 2.3 SDK。

【问题讨论】:

  • 首先像我的代码一样初始化你的paser。

标签: android xml-parsing intellij-idea xmlpullparser


【解决方案1】:

它在 eclipes 中的工作代码,但不了解 Intellij IDEA12

编写此代码以打开并从资产中获取 xml 或根据需要修改

try {           

    XmlPullParserFactory     xppf = XmlPullParserFactory.newInstance();
    XmlPullParser  = xppf.newPullParser();                  
    AssetManager manager = context.getResources().getAssets();
    InputStream input = manager.open("createDb.xml");
    xpp.setInput(input, null);
    int type = xpp.getEventType();
    while(type != XmlPullParser.END_DOCUMENT) {
        if(type == XmlPullParser.START_DOCUMENT) {

            Log.d(Tag, "In start document");
        }
        else if(type == XmlPullParser.START_TAG) {
            Log.d(Tag, "In start tag = "+xpp.getName());
        }
        else if(type == XmlPullParser.END_TAG) {
            Log.d(Tag, "In end tag = "+xpp.getName());

        }
        else if(type == XmlPullParser.TEXT) {
            Log.d(Tag, "Have text = "+xpp.getText());
            if(xpp.isWhitespace())
            {

            }
            else
            {
                String strquery = xpp.getText();
                db.execSQL(strquery);
            }

        }
        type = xpp.next();
    }
} 
catch (XmlPullParserException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

【讨论】:

  • 代码是否工作绝对不应该取决于您使用的 IDE,因为代码是在手机上运行,​​而不是在 IDE 上运行;)
【解决方案2】:

我使用 Eclipse,下面的代码对我有用:

您可能缺少以下第一行:

 XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
 xppf.setNamespaceAware(true); 
 XmlPullParser xpp = xppf.newPullParser();

 File myXML = new File("myXML.xml"); // give proper path            
 FileInputStream fis = new FileInputStream(myXML);

 xpp.setInput(fis, null);

【讨论】:

  • 我尝试它很早,它的工作原理。但我只想用 XmlPullParser 来做到这一点。我可以吗?
  • 您需要实例化您的 XmlPullParser 才能使用它。为此,您需要 XmlPullParserFactory。我的代码对我有用。这就是我要做的方式。如果需要,您可以查看谷歌文档。
【解决方案3】:

您没有实例化 XmlPullParser 的实例。试试:

XmlPullParser parser = Xml.newPullParser();

另外,您需要调用:

parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);

来自文档:

使用此调用来更改解析器的一般行为,例如命名空间处理 > 或 doctype 声明处理。 此方法必须在第一次调用 >next 或 nextToken 之前调用。否则抛出异常。

示例:调用 setFeature(FEATURE_PROCESS_NAMESPACES, true) 以打开命名空间>处理。初始设置对应于从 XML Pull >Parser factory 请求的属性。如果未请求任何功能,则默认禁用所有功能。

【讨论】:

  • 你是说你的问题已经解决了吗?你能说一下你用的是什么解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2021-06-16
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多