我正在尝试获取名称并读取 type="alpha"。
我是初学者,英语不是我的母语,请原谅。我已经阅读了有关 DOM、SAX、Simple、其他 StackOverflow 帖子和其他示例的信息,但我不理解并且想在这种情况下了解 XMLPullParser。
下面的示例 XML:
<feed>
<title>Title</title>
<item>
<entry>
<name>Name1</name>
<record date="20001231">
<reading type="alpha" value="100"/>
<reading type="beta" value="200"/>
</record>
</entry>
<entry>
<name>Name2</name>
<record date="20001231">
<reading type="alpha" value="300"/>
<reading type="beta" value="400"/>
</record>
</entry>
</item>
</feed>
我读过这个:http://developer.android.com/training/basics/network-ops/xml.html
示例代码适用于上面没有
private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List<Entry> entries = new ArrayList<Entry>();
parser.require(XmlPullParser.START_TAG, ns, "feed");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
if (parser.getName().equals("entry")) {
entries.add(readEntry(parser));
} else {
skip(parser);
}
}
return entries;
}
我尝试使用
private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List<Entry> entries = new ArrayList<Entry>();
parser.require(XmlPullParser.START_TAG, ns, "feed");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
if (parser.getName().equals("item")) {
parser.next();
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
if (parser.getName().equals("entry")) {
entries.add(readEntry(parser));
} else {
skip(parser);
}
}
} else {
skip(parser);
}
}
return entries;
}
如果我能解决这个问题,我将能够读取姓名和记录日期,但我想要获取的是姓名 和reading type="alpha",我不知道如何获取嵌套阅读类型="alpha"。
非常感谢。
最佳答案
你可以试试这个功能
private List readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List entries = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "feed");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// Starts by looking for the item tag
if (name.equals("item")) {
parser.require(XmlPullParser.START_TAG, ns, "item");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
// and then get the entry here
if (name.equals("entry")) {
entries.add(readEntry(parser));
}
}
} else {
skip(parser);
}
}
return entries;
}
其中 readEntry 函数是:
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "entry");
String name = null;
Record record = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("name")) {
parser.require(XmlPullParser.START_TAG, ns, "name");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "name");
} else if (name.equals("record")) {
// Try to figure it out by yourself for practice ;)
} else {
skip(parser);
}
}
return new Entry(title, summary, link);
}
关于java - 在 Android 中使用 XMLPullParser 的 XML 嵌套标签有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341391/