【问题标题】:Java - Using DocumentBuilder/XML parser in Android studioJava - 在 Android Studio 中使用 DocumentBuilder/XML 解析器
【发布时间】:2017-10-15 20:18:46
【问题描述】:

我正在尝试使用 dom XML 解析器,但它会因 IOException 而崩溃

Document doc = builder.parse(file); 

代码:

try {

   DocumentBuilderFactory factory =  DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   File file = new File(getResources().getResourceName(R.raw.fooddata));
   Document doc = builder.parse(file);

}catch (ParserConfigurationException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
} catch (SAXException e) {
   e.printStackTrace();
}

我认为文件路径有问题。 fooddata.xml 文件位于 /res/xml/fooddata.xml 和 /res/raw/fooddata.xml 中,我尝试以不同的方式访问它,但没有任何效果。

我从 try/catch 得到 IOException

如何让 builder.parse(file) 工作?

【问题讨论】:

    标签: java android xml parsing dom


    【解决方案1】:

    fooddata.xml 文件位于 /res/xml/fooddata.xml & /res/raw/fooddata.xml

    这些是您的开发机器上的文件。它们是 Android 设备上的文件。资源只是设备上 APK 文件中的条目。

    替换:

    File file = new File(getResources().getResourceName(R.raw.fooddata));
    Document doc = builder.parse(file);
    

    与:

    Document doc=builder.parse(getResources().openRawResource(R.raw.fooddata));
    

    【讨论】:

    • 它似乎工作得更好,但现在我得到了 OutOfMemoryError。 xml文件为30mb。
    • @SimonAndersson 这就是 DOM 的问题:它是内存密集型的。您可能不得不改用 SAX 或 StAX。
    • @Andreas 所以问题是 android 设备上的 ram?因为我的模拟器工作正常
    • @SimonAndersson 这是我的猜测,是的。
    • @SimonAndersson:如果您打算一次将 XML 文件中的所有数据读入内存 (DOM),那么您注定要失败。您的应用程序可能没有 30MB 的堆空间。如果您只需要该 XML 的一个子集,请从资源中删除多余的内容,因为打包多余的数据并浪费用户设备上的空间是没有意义的。
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2011-09-30
    • 2013-06-25
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多