我想弄清楚用Wolfram | Alpha API分析結果的XML,我已經在Android中搜索關於XmlPullParser的一般問題,但似乎無法解析XML數據。Android XmlPullParser Wolfram | Alpha API
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標籤。