簡體   English   中英

如何從本地res / raw文件夾中獲取XML?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM