따라서 XML을 파싱하는 함수는 거의 필수적인 라이브러리가 되었습니다.
아래 함수는 XmlObjectToArray 함수로써, simplexml_load_string를 사용하였습니다.
( 고로 PHP5 이상이어야만 합니다. )
- 기능
xml string을 PHP5 기본제공함수인 simplexml_load_string으로 Object로 바꾼 객체를
사용하기 편하도록 Array로 변환
- 제한사항
앞서 언급했지만, PHP5를 사용할수 있는 환경이어야 합니다. ( simplexml_load_string )
캐릭터셋은 EUC-KR 아니면 UTF-8이라 가정하에 처리하였습니다.
( 원래 이러면 안되지만, 적절히 수정하셔서 쓰시길.. )
- 사용법 유의사항
XML의 경우 중복된 Element 들이 있는 경우는 따로 그 엘리먼트를 기억하여 인자로 배열로서 넘겨주어야 합니다.
이는 simplexml_load_string 이라는 함수 자체가 object를 단수와 복수를 다른 포맷으로 전달하여 처리의 일관성을 보장하지 못하여 생기는 문제를 해결하기 위해 부득이하게 사용하게 되었습니다.
나머지는 직접 사용해보시면 쉽게 이해가 되실것이라 생각됩니다.
- 샘플 소스
<?php
function getHttpContents( $sUrl, $iTimeout = 5, $bHeader = false ) {
$hCurl = curl_init();
curl_setopt( $hCurl, CURLOPT_URL, $sUrl );
curl_setopt( $hCurl, CURLOPT_TIMEOUT, $iTimeout );
curl_setopt( $hCurl, CURLOPT_RETURNTRANSFER, 1 );
if ( $bHeader == true ) {
curl_setopt( $hCurl, CURLOPT_HEADER, 1 );
}
$sResult = curl_exec( $hCurl );
curl_close( $hCurl );
return $sResult;
}
function XMLObjectToArray2( &$objSource, $arrMultiKey = array(), $bUTF8 = false ) {
if ( is_object( $objSource ) ) {
$array = array();
if ( is_object( $objSource->attributes() ) ) {
foreach( $objSource->attributes() as $k => $v ) {
$array[ '@attributes' ][ $k ] = ( $bUTF8 == false ) ? iconv( 'UTF-8', 'EUC-KR', (string)$v ) : (string)$v;
}
}
foreach ( $objSource as $key => $value ) {
if ( (is_object($value) ) && ( count( $value ) > 0 ) ) {
if ( in_array( $key, $arrMultiKey ) ) {
$array[ $key ][] = XMLObjectToArray2( $value, $arrMultiKey, $bUTF8 );
}
else {
$array[ $key ] = XMLObjectToArray2( $value, $arrMultiKey, $bUTF8 );
}
}
else if ( is_object($value) ) {
# 맨 마지막 Depth의 Element는 항상 한개씩 빼온다.
$sValue = ( $bUTF8 == false ) ? iconv( 'UTF-8', 'EUC-KR', ( string )$value[ 0 ] ) : ( string )$value[ 0 ];
if ( in_array( $key, $arrMultiKey ) ) {
$array[$key][] = $sValue;
}
else $array[ $key ] = $sValue;
}
else {
if ( is_array( $value ) ) {
$array[ $key ] = $value;
}
else {
$array[ $key ] = ( $bUTF8 == false ) ? iconv( 'UTF-8', 'EUC-KR', ( string )$value ) : ( string )$value;
}
}
}
return $array;
}
return $objSource;
}
$sUrl = 'http://xxxxxx/?xxxxx';
$sHttpContents = getHttpContents( $sUrl );
$objDom = simplexml_load_string( $sHttpContents );
$arrData = XMLObjectToArray2( $objDom, array( 'address', 'index' ) );
?>
"안주꺼리" 분류의 다른 글
| 민효린 망사, 미녀 여죄수 (0) | 2010/09/03 |
| 꼽등이 공포, 채연 과거 (0) | 2010/09/03 |
| 해운대 최고몸짱, 조영남 유서 (0) | 2010/09/03 |
| 황정음 베드신, 우리 샤워신 (0) | 2010/09/02 |
| 아파트 황구렁이, 뮤비 한유나 (0) | 2010/09/01 |
| 폭음 사망률, 천수정 비키니 (0) | 2010/09/01 |
| 홍대 계란녀, 걸그룹 노출 (0) | 2010/08/31 |
| 자동차 속눈썹, 김탁구 촬영거부 (0) | 2010/08/31 |
| 아딸 떡볶이 (0) | 2010/08/30 |
| 생선장수 살해, 화보 함아름 (0) | 2010/08/29 |



