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

xml 파싱오류 질문합니다.

0 추천

안녕하세요.

안드로이드에서 mysql 디비에 텍스트를 저장해서 불러오는 것을 구현하고 있는데

1. 안드로이드에서 디비에 저장
2. php로 디비에 저장된 값을 불러옴
3. xml로 저장
4. 안드로이드에서 xml파싱
순서로 진행을 했습니다.  디비 컨넥트하고 xml까지 잘 저장이 되는데 안드로이드에서 불러올 때

Unexpected token (position:TEXT : parse error....라고 뜨고, 맞는데이터가 없을때 no data라고 결과값을 출력해오게 했는데 no data가 뜹니다.
 

아래는 XML파싱해오는 코드이고요.

private ArrayList<String> getXmlDataList(String filename, String str) {
  String rss = SERVER_ADDRESS + "/";
  ArrayList<String> ret = new ArrayList<String>();

  try { // XML 파싱을 위한 과정
   XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
   factory.setNamespaceAware(true);
   XmlPullParser xpp = factory.newPullParser();
   URL server = new URL(rss + filename);
   InputStream is = server.openStream();
   xpp.setInput(is, "UTF-8");

   int eventType = xpp.getEventType();

   while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_TAG) {
     Log.d("xpp.getName() + str11111", xpp.getName() + "-----" + str);
     if (xpp.getName().equals(str)) { // 태그 이름이 str 인자값과 같은 경우
      Log.d("xpp.getName() + str22222", xpp.getName() + "-----" + str);
      ret.add(xpp.nextText());
     }
    }
    eventType = xpp.next();
   }
  } catch (Exception e) {
   Log.e("Error4", e.getMessage());
  }
  return ret;
 }

 여기서 제가 xpp.getName() 로그를 찍어보니 br과 b박에 나오지 않습니다. 테그가 같은게 없어서 제가 잘못 하고 있는게 뭘까요...? 
if (xpp.getName().equals(str))에서 str은 name과 price를 가져오는데
xpp.getName()는 br과 b가 들어와서 같은 테그가 없기 때문에 no data가 나오는것 같은데......br과 b가 찍히는 이유가 뭔지 잘 모르겠습니다.

아래는 PHP코드로 디비에 저장된 내용 SELECT하는 코드입니다.

<head>
<meta http-equiv = "content-Type" content = "text/html" charset = "utf-8">
</head>
<?
include "dbcon.php";

mysql_selectdb("testdb", $conn);
mysql_query("set names utf8");

$qry = "select * from test";
$result = mysql_query($qry, $conn);

$xmlcode = "<?xml version = \"1.0\" encoding = \"utf-8\"?>\n";

while($obj = mysql_fetch_object($result))
{
 $name = $obj->name;
 $price = $obj->price;

  $xmlcode .= "<node>\n";
   $xmlcode .= "<name>$name</name>\n";
   $xmlcode .= "<price>$price</price>\n";
   $xmlcode .= "</node>\n";
}

mysql_close($conn);

$dir = "D:/phpWebService";
$filename = $dir."/searchresult.xml";

$fp = fopen("$filename","w");
fputs($fp, $xmlcode);
fclose($fp);

?>

마지막으로 PHP에서 만든 XML파일은 이렇습니다.

<?xml version = "1.0" encoding = "utf-8"?>
<node>
<name>aaa</name>
<price>111</price>
</node>
<node>
<name>aaa</name>
<price>555</price>
</node>
<node>
<name>test</name>
<price>11</price>
</node>
<node>
<name>test111</name>
<price>11111</price>
</node>
<node>
<name>1</name>
<price>1</price>
</node>
<node>
<name>2</name>
<price>2</price>
</node>
<node>
<name>3</name>
<price>3</price>
</node>
<node>
<name>3</name>
<price>3</price>
</node>
<node>
<name>4</name>
<price>4</price>
</node>
<node>
<name>55</name>
<price>5</price>
</node>
<node>
<name>6</name>
<price>6</price>
</node>
<node>
<name>8</name>
<price>8</price>
</node>
<node>
<name>9</name>
<price>9</price>
</node>
<node>
<name>11</name>
<price>11</price>
</node>
<node>
<name>12</name>
<price>12</price>
</node>
<node>
<name>13</name>
<price>13</price>
</node>
<node>
<name>15</name>
<price>15</price>
</node>
<node>
<name>16</name>
<price>16</price>
</node>
<node>
<name>16</name>
<price>16</price>
</node>
<node>
<name>16</name>
<price>16</price>
</node>
<node>
<name>16</name>
<price>16</price>
</node>
<node>
<name>21</name>
<price>21</price>
</node>
<node>
<name>33</name>
<price>33</price>
</node>
<node>
<name>55</name>
<price>55</price>
</node>
<node>
<name>88</name>
<price>88</price>
</node>
<node>
<name>44</name>
<price>44</price>
</node>
<node>
<name>33</name>
<price>33</price>
</node>
<node>
<name>55</name>
<price>55</price>
</node>
<node>
<name>67</name>
<price>89</price>
</node>
<node>
<name>12</name>
<price>12</price>
</node>

며칠을 인터넷 찾아보고 해도 문제 없어보이는데 위 같은 Exception오류가 나는 이유가 뭘까요.....

랑뚜 (220 포인트) 님이 2014년 3월 17일 질문
랑뚜님이 2014년 3월 17일 수정

1개의 답변

+1 추천
  • xml 에 대해서 잘 못 이해하시고 있네요 root element 는 1개여야 하죠 즉 nodes 를 하나 만들고 그 안에 node 를 생성하세요
  • 그리고 저리 plaintext 형태로 xml 을 만들면 나중에 피봅니다. 특수 문자의 경우 별도 처리를 해줘야 하기 때문이구요 php 제공하는 xml 을 생성하는 함수를 이용해서 xml 을 만드세요
aucd29 (218,390 포인트) 님이 2014년 3월 17일 답변
답변 감사합니다. 생각해보니 말씀대로 root element는 한개인게 맞군요. xml 파싱하는 부분이 필요해서 찾아 찾아 하는거라...미처 생각하지 못했습니다. 그런데 여전히 파싱이 제대로 되지 않는데 태그를 br과 b를 가져오는 이유 혹시 아시나요. br과 b라는 태그는 없는데 이상하네요...
xml 인데
<head>
<meta http-equiv = "content-Type" content = "text/html" charset = "utf-8">
</head>

가 있는것도 말이 안되구요

해당 코드를 처리 하는 부분에서 nl2br 을 넣고 db 에 넣었을 수도 있습니다.

디비에서 read 시 striptags 를 넣어보세요
...