Я пытаюсь разобрать XML
, который является ThirdParty ответ, когда я называю определенный API Вот отклик XML
:XmlPullParser исключение org.xmlpull.v1.XmlPullParserException: ожидаемое START_TAG {NULL} содержание (положение:. START_TAG
<mojiva>
<ad type="thirdparty" feed="xyz">
<url>
<![CDATA[ ]]>
</url>
<text>
<![CDATA[ ]]>
</text>
<track>
<![CDATA[ ]]>
</track>
<content>
<script> // Original sdk: "http://lp.mydas.mobi/custom/rich/common/js/mmisdk/mmsdk.min.js" </script>
</content>
</ad>
</mojiva>
Я пытаюсь разобрать <content>
тег, но я получаю следующее исключение:
12-16 06:40:55.148: W/System.err(4089): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}content (position:START_TAG <text>@1:116 in [email protected])
12-16 06:40:55.148: W/System.err(4089): at org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
Изменено код: Я разбор XML
с использованием XmlPullParser
. Вот то, что мой код выглядит следующим образом:
public class AdPull {
private static final String ns = null;
List<Entry> all;
InputStream is;
public AdPull(InputStream open) {
is = open;
}
public List<Entry> getData() {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(is, null);
parser.nextTag();
all = (ArrayList<Entry>) readFeed(parser);
for (int i = 0; i < all.size(); i++) {
Log.i("........", "" + all.get(i).url);
Log.i("........", "" + all.get(i).text);
Log.i("........", "" + all.get(i).track);
Log.i("........", "" + all.get(i).thirdPartyContent);
}
} catch (Exception e) {
e.printStackTrace();
}
return all;
}
private List<Entry> readFeed(XmlPullParser parser)
throws XmlPullParserException, IOException {
List<Entry> entries = new ArrayList<Entry>();
parser.require(XmlPullParser.START_TAG, ns, "mojiva");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("ad")) {
entries.add(readAd(parser));
} else {
skip(parser);
}
}
return entries;
}
private Entry readAd(XmlPullParser parser) throws XmlPullParserException,
IOException {
parser.require(XmlPullParser.START_TAG, ns, "ad");
String url = null;
String text = null;
String track = null;
String content = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
Log.i("...............", name);
if (name.equals("url")) {
url = readUrl(parser);
} else if (name.equals("text")) {
text = readTexta(parser);
} else if (name.equals("track")) {
track = readTrack(parser);
} else if (name.equals("content")) {
content = readContent(parser);
} else {
skip(parser);
}
}
return new Entry(url, text, track, content);
}
private String readContent(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "content");
String content = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("script")) {
content = readScript(parser);
Log.i(".......", content);
} else {
skip(parser);
}
}
return content;
}
private String readScript(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "script");
String script = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "script");
return script;
}
private String readUrl(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "url");
String url = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "url");
return url;
}
private String readTexta(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "text");
String text = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "text");
return text;
}
private String readTrack(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "track");
String track = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "track");
return track;
}
private String readText(XmlPullParser parser) throws IOException,
XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
private void skip(XmlPullParser parser) throws XmlPullParserException,
IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
}
Я звоню GetData() с моей MainActivity в асинхронной задаче:
class AsyncTaskRunner extends AsyncTask<Void, List<Entry>, List<Entry>> {
@Override
protected List<Entry> doInBackground(Void... sUrl) {
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httppost = new HttpGet(completeURL);
HttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
String _respons = EntityUtils.toString(ht);
InputStream is = new ByteArrayInputStream(_respons.getBytes());
AdPull ad = new AdPull(is); // expects a input stream
List<Entry> list = ad.getData();
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Может кто-нибудь комментарий, почему downvote? Прежде чем дать кому-нибудь нить, объясните причину? – Anupam
'else if (type.equals (" thirdparty "))' нет тега по имени thirdparty – Raghunandan
@Raghunandan 'type = parser.getAttributeValue (null," type ");'. Я получаю оттуда ответ и делаю так. Это нормально работает, я проверил его. Если 'type' является' thirdparty', он входит внутрь, иначе это не так. Поэтому, я думаю, это не может быть проблемой здесь. – Anupam