Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中从res/XML打开XML文件_Android_Xml_File_Local_Saxparser - Fatal编程技术网

在Android中从res/XML打开XML文件

在Android中从res/XML打开XML文件,android,xml,file,local,saxparser,Android,Xml,File,Local,Saxparser,我创建了一个Java应用程序,它打开一个xml文件,如下所示: 犬的 蓝色 我可以使用以下方法打开它: File fXmlFile=getResources.getXml(“res/xml/data.xml”); DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder=dbFactory.newDocumentBuilder(); documentdoc=d

我创建了一个Java应用程序,它打开一个xml文件,如下所示:


犬的
蓝色
我可以使用以下方法打开它:

File fXmlFile=getResources.getXml(“res/xml/data.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList animalNodes=doc.getElementsByTagName(“动物”);
然后我可以简单地创建一个节点,将对象推入ListArray,然后在循环ListArray时对对象执行我想要的操作

for(int-temp=0;temp
简单明了!现在,在Android中,我不能简单地读取文件“
res/xml/data.xml
”,因为“
file();
”需要一个
String
而不是
integer
(id)。这就是我丢失的地方。有什么方法可以让“
file();
”这样做吗打开文件,或者如果不使用
SAXparser
XPP
,这是不可能的(无论我怎么努力,这两个我都无法理解。)

如果我被迫使用这些方法,有人能给我看一些类似于我的示例的简单代码吗?

如果它在资源树中,它将获得分配给它的ID,因此您可以使用openRawResource函数打开一个流:

InputStream is=context.getResources().openrawsource(R.xml.data);

至于在Android中使用XML,这是非常彻底的

请参见该链接中的清单9.feed解析器的基于DOM的实现

获得输入流(如上)后,可以将其传递给DocumentBuilder的实例:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(this.getInputStream());
Element root = dom.getDocumentElement();
NodeList items = root.getElementsByTagName("TheTagYouWant");
请记住,我个人并没有这样做——我假设IBM提供的代码可以工作。

试试这个

this.getResources().getString(R.xml.test); // returns you the path , in string,invoked on activity object

我尝试了使用openRawResource的方法,得到了一个SAXParseException。因此,我使用getXml获得了一个XmlPullParser。然后我使用next()逐步完成解析事件。实际的文件是res/xml/dingors.xml

XmlResourceParser parser = context.getResources().getXml(R.xml.dinosaurs);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
    switch (eventType) {
        case XmlPullParser.START_DOCUMENT :
            Log.v(log_tag, "Start document");
            break;
        case XmlPullParser.START_TAG :
            Log.v(log_tag, "Start tag " + parser.getName() );
            break;
        case XmlPullParser.END_TAG :
            Log.v(log_tag, "End tag " + parser.getName() );
            break;
        case XmlPullParser.TEXT :
            Log.v(log_tag, "Text " + parser.getText() );
            break;
        default :
            Log.e(log_tag, "Unexpected eventType = " + eventType );
    }
    eventType = parser.next();
}

我不明白?然后我会改成字符串并将其放入“File();”?您留下的IBM资源演示了如何从联机中提取xml。我不明白为什么这么难?您能为我上面发布的内容创建一个伪代码版本吗?谢谢。这更好,我在IBM网站上看到过,但是“getInputStream();”位于BaseFeedParser类中,它“实现”了IBM站点上未列出的FeedParser类。我在代码中创建了BaseFeedParser类,但eclipse向我抛出了一个关于FeedParser的错误。该站点说:"然而,DOM通常会消耗更多的内存,因为所有内容都是先读入内存的。这在运行Android的移动设备上可能是一个问题,但在某些使用情况下,XML文档的大小永远不会很大,这是令人满意的。有人可能会暗示Android的开发人员猜测SAX解析会更常见在Android应用程序上,因此提供了额外的实用程序。“这非常糟糕。我的XML将有大约100个对象。DOM方法将50行代码添加到我的项目中,这太不切实际了。您是否使用XML来本地存储数据?在这种情况下,我建议使用SQLite。它是堆栈的本机。Re:FeedParser:它是一个接口:
public interface FeedParser