2014-10-17 121 views
-1

我目前正在嘗試使用XmlResourceParser解析一些XML,然後使用ArrayAdapter在ListView上顯示信息。問題是,我沒有得到螞蟻的結果。解析XML不會返回任何內容

我的XML結構是這樣的:

<resources> 

<categories> 
    <animal> 
     <word> 
      <english>Animal</english> 
      <french>Animal</french> 
      <spanish>Animal</spanish> 
      <portuguese>Animal</portuguese> 
     </word> 
    </animal> 
    <transportation></transportation> 
    <location></location> 
    <clothing></clothing> 
    <color></color> 
    <people></people> 
    <job></job> 
    <society></society> 
    <art></art> 
    <beverages></beverages> 
    <food></food> 
    <home></home> 
    <electronics></electronics> 
    <body></body> 
    <nature></nature> 
    <material></material> 
    <math></math> 
    <directions></directions> 
    <seasons></seasons> 
    <numbers></numbers> 
    <months></months> 
    <days></days> 
    <time></time> 
    <verbs></verbs> 
    <adjectives></adjectives> 
</categories> 

現在,每個類別都會有他們不同的詞,但在這一刻,我只是想獲得的所有類別,並顯示在一個列表顯示。嘗試並獲得我使用下面的代碼的所有類別:

public class MainActivity extends ActionBarActivity { 

private ListView list; 
private ArrayList<String> arrayCategories; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    list = (ListView) findViewById(R.id.listView1); 

    try { 
     arrayCategories = parseCategories(); 

     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
       this, 
       R.id.listView1, 
       arrayCategories); 

     list.setAdapter(arrayAdapter); 

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

} 

而且parseCategories功能如下:

private ArrayList<String> parseCategories() throws IOException { 
    ArrayList<String> categories = new ArrayList<String>(); 
    XmlResourceParser parser = getResources().getXml(R.xml.database); 

    try { 
     int eventType = parser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG) { 
       if (parser.getName().equals("categories")) { 
        categories.add(parser.nextText()); 
       } 
      } 

      eventType = parser.next(); 
     } 
    } catch (XmlPullParserException e) { 
     Log.e("XmlPullParserException", e.toString()); 
    } 
    parser.close(); 

    return categories; 
} 

我還是有點雛當談到解析xml,你們能幫我解決這個問題嗎?

+1

類別元素中沒有「文本」,只有更多的元素。 (唯一的文本是在標籤中,例如' Animal',將'.equals(「categories」)'改爲'.equals(「english」)'看看。) – user2864740 2014-10-17 20:48:49

+1

我這個你應該得到幫助我已經回答了題。 [點擊這裏] [1] [1]:http://stackoverflow.com/questions/26397647/how-to-make-rss-news-reader-application-in-android/26398110 #26398110 – 2014-10-17 20:49:39

+0

所以基本上你說我應該對類別進行「硬編碼」,但是我怎麼知道某個特定單詞屬於哪個類別? – 2014-10-17 21:01:45

回答

1

問題是類別元素中沒有「文本」但是,有很多孩子的元素。

真正的任務都可以很簡單概括爲:

如何獲得它們的類別元素的直接子的所有元素的名稱是什麼?

此問題是由由XmlPullParser複雜一點點(使用DOM和/或XPath就好辦多了),但它是可行的。這裏的訣竅是通過保留一個深度計數器來「跳過」子樹;遞歸函數也可以工作。

int eventType = parser.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 

    if (eventType == XmlPullParser.START_TAG 
     && parser.getName().equals("categories")) { // catergories start 

    int depth = 0; 
    eventType = parser.next(); 
    while (!(depth == 0 && eventType == XmlPullParser.END_TAG)) { // end categories 

     if (eventType == XmlPullParser.START_TAG) { 
     if (depth == 0) { // direct child of categories 
      categories.add(parser.getName()); 
     } 
     depth++; 
     } else if (eventType == XmlPullParser.END_TAG) { // depth > 0 
     depth--; 
     } 

     eventType = parser.next(); 
    } 

    } 

    eventType = parser.next(); 
}