我目前正在尝试使用XmlResourceParser解析一些XML,然后使用ArrayAdapter在ListView上显示信息。问题是,我没有得到蚂蚁的结果。
我的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>
现在,每个类别都会有不同的单词,但此时我只想获取所有类别并在ListView中显示它们。要尝试使用以下代码获取所有类别:
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时,我仍然有点缺乏经验,你能帮我解决这个问题吗?
答案 0 :(得分:1)
问题是没有&#34;文字&#34;在categories元素中;但是,有很多子元素。
真正的任务可以简单地概括为:
如何获取所有元素的名称,这些元素是categories元素的直接子元素?
这个问题因XmlPullParser而变得有点复杂(使用DOM和/或XPath会更容易),但这是可行的。这里的诀窍是&#34;跳过&#34;通过保持一点深度计数器的子树;递归函数也可以。
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();
}