【发布时间】:2015-12-20 04:14:23
【问题描述】:
我正在尝试使用 Wolfram|Alpha API 的结果找出 XML 解析,我搜索了有关 Android 中 XmlPullParser 的一般问题,但似乎无法解析 XML 数据。
try {
URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
InputStream response = urlConnection.getInputStream();
XmlPullParser parser = Xml.newPullParser()
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(response, null);
parser.nextTag();
results = readFeed(parser);
} catch (Exception e) {
e.printStackTrace();
}
我可以很好地连接到 API 并返回结果。 http://products.wolframalpha.com/api/explorer.html 您将能够看到返回的结果。
我的基本请求如下所示:http://api.wolframalpha.com/v2/query?appid=xxx&input=What%20day%20is%20today%3F&format=plaintext
现在解析 inputStream:
private List<String> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, null, "queryresult");
List<String> entries = new ArrayList<>();
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// Starts by looking for the entry tag
if (name.equals("pod")) {
System.out.print(" In pod: " + parser.getName());
entries.add(readEntry(parser));
}
else{
skip(parser);
}
}
return entries;
}
private String readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, null, "pod");
String plainText = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("subpod")) {
System.out.print(" In subpod: " + parser.getName());
plainText = getPlainText(parser);
}
else{
skip(parser);
}
}
return plainText;
}
private String getPlainText(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, null, "subpod");
String result = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("plaintext")) {
System.out.print(" In plaintext: " + parser.getText());
result = parser.getText();
}
else{
skip(parser);
}
}
return result;
}
我的控制台上的结果如下所示:
I/System.out﹕ In pod: pod In subpod: subpod In plaintext: null[null]
代码运行良好,但存在一些问题:
- 找不到明文标签的值。
- 这似乎只循环通过第一个 pod 标签。
【问题讨论】:
标签: android xml api xmlpullparser wolframalpha