마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Xml PullParser에 대해서 질문입니다.

0 추천

전에도 질문을 올렸지만 해결이 안되서 다시 질문을 올립니다.

웹 사이트에서 내려오는 xml은

 

<site>
<title> 1111 </title>
<item>...</item>
<item>
<number>2012</number>
<title> aaa </title>
</item>

 

이런 식으로 <item>이 반복이 되고 있습니다.

현제 제가 필요한건 <item> 안에 있는 title 과 number가 필요합니다.

 

private ArrayList<XmlData> GetXmlData(int count) {

		m_xmlData = new ArrayList<XmlData>();

		xmlData = null;

		try {

			text = new URL(uri);

			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
			XmlPullParser parser = factory.newPullParser();

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					text.openConnection().getInputStream()));

			StringBuilder sb = new StringBuilder();

			String line = null;

			while ((line = reader.readLine()) != null) {

				sb.append(line + "\n");

			}

			String str = sb.toString().trim();

			InputStream is = new ByteArrayInputStream(str.getBytes());

			parser.setInput(is, "UTF-8");

			int parseEvent = parser.getEventType();

			while (parseEvent != XmlPullParser.END_DOCUMENT) {

				if (parseEvent == XmlPullParser.START_TAG) {
					tag = parser.getName();
					 if (tag.equals("title")) {
					 xmlData = new XmlData();
					 xmlData.d_title = parser.nextText();
					 }
					if (tag.equals("number")) {
						xmlData = new XmlData();

						xmlData.d_link = parser.nextText();

						Log.w("test", "xmlData.d_link : " + xmlData.d_link);

					}
					if (tag.equals("pubDate")) {
						xmlData.d_pubdate = parser.nextText();
						pubdate = xmlData.d_pubdate;

					}

				}
				if (parseEvent == XmlPullParser.END_TAG) {
					tag = parser.getName();
					if (tag.equals("item")) {
						m_xmlData.add(xmlData);
					}
				}
				if (parseEvent == XmlPullParser.TEXT) {
					tag = parser.getName();

				}

				parseEvent = parser.next();

			}

		} catch (Exception e) {
		}

		return m_xmlData;

	}

 

Log.w("test", "xmlData number  :  " + xmlData.d_link);로 로그를 찍엇을때는
해당 값에 대해서 나오고 있지만 어댑터에서 확인하면 title만 가져오고 있습니다.
 
tile에서 xmlData = new XmlData();을 블록 처리하고 진행을 하면
 
반대로 number은 보이고 title은 안보이고 있습니다.
 
title과 number이 다 필요한데 이럴경우 어떻게 해야 할까요?
크라시엘 (2,320 포인트) 님이 2013년 5월 23일 질문

1개의 답변

0 추천

XML 구조가

<site>
    <item>
        <number>2012</number>
        <title> aaa </title>
    </item>
    <item>...</item>
</site>
 
이게 맞나요?
 
그리고 소스에 
xmlData = new XmlData(); 은 Item 안의 첫태그인 number값이 있을때 처음에만 넣어야죠. 클래스를 두번 생성하니까 각각 다른 값이 들어가있는 겁니다.
 
if (tag.equals("number")) {
    xmlData = new XmlData();
    xmlData.d_link = parser.nextText();
}
if (tag.equals("title")) {
    xmlData.d_title = parser.nextText();
}
 
그리고 가급적이면 XML 태그 순서에 맞게 태그를 비교하는 코드를 작성하도록 하시는게 좋겠네요.
smallworld (710 포인트) 님이 2013년 5월 28일 답변
...