解析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,你们能帮我解决这个问题吗?
答
问题是类别元素中没有“文本”但是,有很多孩子的元素。
真正的任务都可以很简单概括为:
如何获得它们的类别元素的直接子的所有元素的名称是什么?
此问题是由由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();
}
类别元素中没有“文本”,只有更多的元素。 (唯一的文本是在标签中,例如' Animal ',将'.equals(“categories”)'改为'.equals(“english”)'看看。) –
user2864740
2014-10-17 20:48:49
我这个你应该得到帮助我已经回答了题。 [点击这里] [1] [1]:http://stackoverflow.com/questions/26397647/how-to-make-rss-news-reader-application-in-android/26398110 #26398110 – 2014-10-17 20:49:39
所以基本上你说我应该对类别进行“硬编码”,但是我怎么知道某个特定单词属于哪个类别? – 2014-10-17 21:01:45