나는 API에서 나온 XML
을 가지고 있는데, 표시 할 광고가 일부 포함되어 있습니다. 이 I에서XML 형식의 CDATA 태그를 사용하여 구문 분석
<mojiva>
<ad type="image">
<url>
<![CDATA[
http://google.com
]]>
</url>
<img type="image/png">
<![CDATA[
http://account.mobfox.com/activation_vad.php
]]>
</img>
<track>
<![CDATA[
http://ads.moceanads.com/2/img/c2d79d40-6182-11e3-8f06-a0369f167751
]]>
</track>
</ad>
</mojiva>
<url>
태그와 내 응용 프로그램 내에서 적절하게 표시하기위한 <img>
태그를 구문 분석하는 두 가지 : 여기 XML
의 모습입니다. 두 태그 내부에 CDATA
의 사례가 있습니다.
CDATA
없이 언급 된 태그를 구문 분석하여 URL을 얻고 표시하려면 어떻게해야합니까? 모든 종류의 도움을 주시면 감사하겠습니다.
업데이트 코드 (사용 XMLPullParser)이 제공되고,
class AsyncTaskRunner extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
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());
new AdPull(is);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
을하지만 : 나는 XML
의 값을 인쇄 할 경우
public class AdPull {
private static final String demoURL = null;
public AdPull(InputStream open) {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(open, null);
parser.nextTag();
} catch (Exception e) {
e.printStackTrace();
}
}
private List<Entry> readFeed(XmlPullParser parser)
throws XmlPullParserException, IOException {
List<Entry> entries = new ArrayList<Entry>();
parser.require(XmlPullParser.START_TAG, demoURL, "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, demoURL, "ad");
String url = null;
String image = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("url")) {
url = readUrl(parser);
} else if (name.equals("img")) {
image = readImage(parser);
} else {
skip(parser);
}
}
return new Entry(url, image);
}
private String readUrl(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, demoURL, "url");
String url = readText(parser);
parser.require(XmlPullParser.END_TAG, demoURL, "url");
return url;
}
private String readImage(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, demoURL, "img");
String image = readText(parser);
parser.require(XmlPullParser.END_TAG, demoURL, "img");
return image;
}
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;
}
}
}
public static class Entry {
public final String adURL;
public final String adImage;
private Entry(String url, String image) {
this.adURL = url;
this.adImage = image;
}
}
}
그리고 여기 내 비동기 작업입니다 피드 완전한 URL을 전달할 때마다 오류가 발생합니다. The constructor parserPull(String) is undefined
무엇이 잘못 되었나요? 오히려?
파싱 코드를 추가 할 수 있습니까? –
@Prince 코드로 질문을 업데이트했습니다. 벼룩이 보입니다. – Anupam
@Anupam은 파싱 결과를 기록 할 수 있습니다. 나는 당신에게 workign 코드를 줄 수는 있지만 다른 사람들이 실수를 가리 키지 않을 것입니다. 구문 분석이 잘 작동합니까? – Raghunandan