Xmlpullparser Android 嵌套标签
Xmpullparser Android nested tag
我在解析 xml 文档时遇到问题,我需要从以下部分获取值:坐标。 parsing和section都没有问题
下面是我的xml文档和部分代码。有什么建议吗?
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Placemark id="placemark1">
<name>test_name</name>
<description>geom_test</description>
<point>
<coordinates>40.751816, -73.959119</coordinates>
</point>
</Placemark>
<Placemark id="placemark2">
<name>test_name1</name>
<description>geom_test</description>
<point>
<coordinates>40.751816, -73.959119</coordinates>
</point>
</Placemark>
</Document>
</kml>
代码:
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("Placemark")) {
String id = null, date = null, pob = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
name = parser.getName();
if (name.equals("name")) {
id = readText(parser);
} else if (name.equals("description")) {
date = readText(parser);
} else if (name.equals("point")) {
parser.nextTag();
} else if (name.equals("coordinates")) {
pob = readText(parser);
}
}
myDbHelper.insertData(id, date, pob);
你的问题是 nextTag() 直接转到坐标标记,而 next() 调用给你一个结束标记。
因此,您应该在调用 nextTag 后获取文本,或者直接调用 next 并重新进入 while 循环(next 是 "opening" 坐标标记而不是 "inside")。
选项 1 下一个标签:
} else if (name.equals("point")) {
parser.next();
}
选项 2 是在 getNextTag 之后调用 getText:
} else if (name.equals("point")) {
parser.nextTag();
if (parser.getName().equals("coordinates")) {
pob = parser.nextText();
}
}
我在解析 xml 文档时遇到问题,我需要从以下部分获取值:坐标。 parsing和section都没有问题
下面是我的xml文档和部分代码。有什么建议吗?
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Placemark id="placemark1">
<name>test_name</name>
<description>geom_test</description>
<point>
<coordinates>40.751816, -73.959119</coordinates>
</point>
</Placemark>
<Placemark id="placemark2">
<name>test_name1</name>
<description>geom_test</description>
<point>
<coordinates>40.751816, -73.959119</coordinates>
</point>
</Placemark>
</Document>
</kml>
代码:
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("Placemark")) {
String id = null, date = null, pob = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
name = parser.getName();
if (name.equals("name")) {
id = readText(parser);
} else if (name.equals("description")) {
date = readText(parser);
} else if (name.equals("point")) {
parser.nextTag();
} else if (name.equals("coordinates")) {
pob = readText(parser);
}
}
myDbHelper.insertData(id, date, pob);
你的问题是 nextTag() 直接转到坐标标记,而 next() 调用给你一个结束标记。
因此,您应该在调用 nextTag 后获取文本,或者直接调用 next 并重新进入 while 循环(next 是 "opening" 坐标标记而不是 "inside")。
选项 1 下一个标签:
} else if (name.equals("point")) {
parser.next();
}
选项 2 是在 getNextTag 之后调用 getText:
} else if (name.equals("point")) {
parser.nextTag();
if (parser.getName().equals("coordinates")) {
pob = parser.nextText();
}
}