테스트 사이트 - 개발 중인 베타 버전입니다

xml 파싱

· 14년 전 · 2666 · 5
게시판을 xml로 파싱해야 하는데요. 뮤존님 팁을 참고하여 했습니다(아래소스 참조)

xml은 생성되는데

<?xml version="1.0" encoding="utf-8" ?><links><wr_id num="27"><url>도메인</url><bo_name>mp3</bo_name><bo_table>mp3</bo_table><wr_subject>

위 처럼 파싱되다가 말아 버립니다

<links>로 시작해서 </links> 끝을 맺어주어야 하는데 말이죠


아래는 뮤존님의 xml 소스입니다

<?
// 이 상수가 정의되지 않으면 각각의 개별 페이지는 별도로 실행될 수 없음
define("_GNUBOARD_", TRUE);
######################환경변수#########################

$laguage_ = "utf-8"; //xml 생성파일은 utf-8 로 생성되어야 함.

$xml_dir = $g4[path]."/swf/".$write_table; //
$xml_path = $xml_dir."/".$write_table.".xml";
#######################################################
//디렉토리가 존재하지 않는다면 신규생성한다
@mkdir($xml_dir, 0707);
@chmod($xml_dir, 0707);
//파일이 존재하지 않는다면 신규생성한다.
if(!$xml_path){
fwrite($xml_file, "");
fclose($xml_file);
@chmod($xml_path, 0707);
}

$xml_file = fopen($xml_path, "w+")or die("xml file open erro.");

/****************빌더갱신영역***********************/

$rows = 20;
$sql = " select * from $write_table where wr_is_comment = 0 order by wr_id desc limit 0, $rows ";
$result = sql_query($sql);

/*************빌더갱싱*****************************/

$data[lauage] = "<?xml version=\"1.0\" encoding=\"{$laguage_}\" ?>";
$data[xml_start] = "<links>";
$data[xml_end] = "</links>";

$get_xml = "";

//$get_xml .= $data[lauage];
$get_xml .= $data[lauage];
$get_xml .= $data[xml_start];

/*xml 생성*/
while ($list= sql_fetch_array($result)){

$g4['url'] = 'http://' . $_SERVER['HTTP_HOST'];

$get_xml .= "<wr_id num=\"{$list[wr_id]}\">";

$get_xml .= "<url>";
$get_xml .= $g4['url'];
$get_xml .= "</url>";

$get_xml .= "<bo_name>";
$get_xml .= $board[bo_subject];
$get_xml .= "</bo_name>";


$get_xml .= "<bo_table>";
$get_xml .= $bo_table;
$get_xml .= "</bo_table>";


$get_xml .= "<wr_subject>";
$get_xml .= $list[wr_subject];
$get_xml .= "</wr_subject>";

$get_xml .= "<wr_name>";
$get_xml .= $list[wr_name];
$get_xml .= "</wr_name>";

$get_xml .= "<wr_link1>";
$get_xml .= $list[wr_link1];
$get_xml .= "</wr_link1>";

$get_xml .= "</wr_id>";


}

$get_xml .= $data[xml_end];

/****************************xml data end**************************/

//변환
$get_xml = iconv("EUC-KR", "UTF-8",$get_xml);

// write action
if(!fwrite($xml_file, $get_xml)) echo "file wite erro.";

// file close
fclose($xml_file);

?>

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 5개

$list[wr_subject] 를 get_text($list[wr_subject]) 로 해보세요. 그리고 해당 php 파일이 정말로 utf-8 으로 인코딩 되어있는지도 확인 해보세요.
$get_xml = iconv("EUC-KR", "UTF-8",$get_xml); 이걸
$get_xml = iconv("EUC-KR", "EUC-KR",$get_xml); 이렇게 해보세요
<?
// 이 상수가 정의되지 않으면 각각의 개별 페이지는 별도로 실행될 수 없음
define("_GNUBOARD_", TRUE);
######################환경변수#########################

$laguage_ = "utf-8"; //xml 생성파일은 utf-8 로 생성되어야 함.

$xml_dir = $g4[path]."/swf/".$write_table; //
$xml_path = $xml_dir."/".$write_table.".xml";
#######################################################
//디렉토리가 존재하지 않는다면 신규생성한다
@mkdir($xml_dir, 0707);
@chmod($xml_dir, 0707);
//파일이 존재하지 않는다면 신규생성한다.
if(!$xml_path){
fwrite($xml_file, "");
fclose($xml_file);
@chmod($xml_path, 0707);
}

function escape_xml($str)
{
$str = str_replace('&', '&amp;', $str);
$str = str_replace('<', '&lt;', $str);
$str - str_replace('>', '&gt;', $str);
return $str;
}

$xml_file = fopen($xml_path, "w+") or die("xml file open erro.");

/****************빌더갱신영역***********************/

$rows = 20;
$sql = " select * from $write_table where wr_is_comment = 0 order by wr_id desc limit 0, $rows ";
$result = sql_query($sql);

/*************빌더갱싱*****************************/

$data[lauage] = "<?xml version=\"1.0\" encoding=\"{$laguage_}\" ?>\n";
$data[xml_start] = "<links>\n";
$data[xml_end] = "</links>";

$get_xml = "";

//$get_xml .= $data[lauage];
$get_xml .= $data[lauage];
$get_xml .= $data[xml_start];

/*xml 생성*/
while ($list= sql_fetch_array($result)){

$g4['url'] = 'http://' . $_SERVER['HTTP_HOST'];

$get_xml .= "<wr_id num=\"{$list[wr_id]}\">";

$get_xml .= "<url>";
$get_xml .= escape_xml($g4['url']);
$get_xml .= "</url>";

$get_xml .= "<bo_name>";
$get_xml .= escape_xml($board[bo_subject]);
$get_xml .= "</bo_name>";


$get_xml .= "<bo_table>";
$get_xml .= $bo_table;
$get_xml .= "</bo_table>";


$get_xml .= "<wr_subject>";
$get_xml .= escape_xml($list[wr_subject]);
$get_xml .= "</wr_subject>";

$get_xml .= "<wr_name>";
$get_xml .= escape_xml($list[wr_name]);
$get_xml .= "</wr_name>";

$get_xml .= "<wr_link1>";
$get_xml .= escape_xml($list[wr_link1]);
$get_xml .= "</wr_link1>";

$get_xml .= "</wr_id>\n";


}

$get_xml .= $data[xml_end];

/****************************xml data end**************************/

//변환
//$get_xml = iconv("EUC-KR", "UTF-8",$get_xml);

// write action
if(!fwrite($xml_file, $get_xml)) echo "file wite error.";

// file close
fclose($xml_file);

?>
$xml_file = fopen($xml_path, "w+") or die("xml file open erro.");

로 되어 있는 부분을

$xml_file = fopen($xml_path, "w") or die("xml file open erro.");

로 + 를 뺍니다. while 문을 돌리는데 배열 들어가야 하는데 한번 돌고 끝낼것이 아니라면요
메신져 쪽지로 보내주세요 .

게시글 목록

번호 제목
284508
284499
284492
284490
284484
284481
284478
284476
284474
284472
284470
284458
284457
284454
284453
284447
284446
284444
284441
284440