[英]How to get XML from local res/raw folder?
在執行此任務時,我遵循了http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/的 XML解析教程。 對我來說,要減去的是從URL中獲取XML。 我需要從R.raw文件夾中提取。 我搜索了解決方案,發現了許多使用InputStream的解決方案(例如: 在android的listview中加載本地xml數據 )
InputStream is = res.openRawResource(R.raw.localxmlfileName);
但這突出了資源並給出了錯誤:[資源無法解決]。 如何解決這個問題,我走對了嗎?
對於XML,通常一個更好的選擇是把在文件res/xml/
,然后得到一個XmlPullParser
通過調用該XML getResources().getXml()
XmlPullParser
允許您逐步處理XML事件(新文檔,新元素等)並閱讀所需內容。
例如,給定res/xml/words.xml
像這樣:
<words>
<word value="lorem" />
<word value="ipsum" />
<word value="dolor" />
<word value="sit" />
<word value="amet" />
<word value="consectetuer" />
<word value="adipiscing" />
<word value="elit" />
<word value="morbi" />
<word value="vel" />
<word value="ligula" />
<word value="vitae" />
<word value="arcu" />
<word value="aliquet" />
<word value="mollis" />
<word value="etiam" />
<word value="vel" />
<word value="erat" />
<word value="placerat" />
<word value="ante" />
<word value="porttitor" />
<word value="sodales" />
<word value="pellentesque" />
<word value="augue" />
<word value="purus" />
</words>
您可以將它們讀入ArrayList<String>
這樣(例如,從活動內部):
ArrayList<String> items=new ArrayList<String>();
XmlPullParser xpp=getResources().getXml(R.xml.words);
while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) {
if (xpp.getEventType()==XmlPullParser.START_TAG) {
if (xpp.getName().equals("word")) {
items.add(xpp.getAttributeValue(0));
}
}
xpp.next();
}
(那里也有一個try
/ catch
塊,但是為了簡單起見,我將其修剪掉了)
優點是,以這種方式讀取存儲在res/xml/
中的XML的速度比從res/raw/
或純文件中在InputStream
上使用XML解析器的速度快大約十倍。 那是因為Google認真地優化了從已知保存XML的資源目錄( res/xml/
, res/layout/
等)中讀取XML的行為,部分是通過將XML預編譯為“二進制XML”格式來實現的構建過程。
缺點是很少有開發人員熟悉XmlPullParser
。
res
似乎是一個資源變量。 您需要先獲取資源。 嘗試使用類似:
InputStream is = getResources().openRawResource(R.raw.localxmlfileName);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.