解析XML不会返回任何内容

解析XML不会返回任何内容

问题描述:

我目前正在尝试使用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

问题是类别元素中没有“文本”但是,有很多孩子的元素。

真正的任务都可以很简单概括为:

如何获得它们的类别元素的直接子的所有元素的名称是什么?

此问题是由由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(); 
}