💻 쇼핑몰 자동화 & 웹 개발 가이드

PHP로 HTTP 응답에서 XML 데이터만 파싱하는 방법

rhandy 2025. 3. 13. 03:00
728x90

웹 개발을 하다 보면 HTTP 응답에서 XML 데이터만 추출해야 하는 경우가 많습니다. 특히 API 요청을 보낼 때 응답 헤더와 본문이 함께 포함된 경우, 원하는 XML 부분만 가져와야 할 필요가 있습니다. 이번 포스팅에서는 PHP를 사용하여 이러한 문제를 해결하는 방법을 살펴보겠습니다.


1. 문제 정의

다음과 같은 HTTP 응답이 있다고 가정해 보겠습니다.

HTTP/1.1 200 
Server: nginx
Date: Fri, 07 Mar 2025 08:04:02 GMT
Content-Type: application/xml;charset=euc-kr
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, openapikey
<?xml version="1.0" encoding="euc-kr" standalone="yes"?>
<ns2:products>
  <ns2:product>
    <cuponcheck>N</cuponcheck>
    <dispCtgrNo>19021</dispCtgrNo>
    <exchDlvCst>0</exchDlvCst>
    <imageKindChk>01</imageKindChk>
    <prdNm>판매자 상품코드 테스트(구매불가)</prdNm>
    <prdNo>45705741</prdNo>
    <proxyYn>N</proxyYn>
    <rootCtgrNo>0</rootCtgrNo>
    <rtngdDlvCst>0</rtngdDlvCst>
    <selPrc>100000000</selPrc>
    <selStatCd>103</selStatCd>
    <selStatNm>판매중</selStatNm>
    <sellerPrdCd>ctr555</sellerPrdCd>
    <validateMsg/>
    <prdWght/>
    <gblDlvYn>N</gblDlvYn>
    <gblHsCode/>
    <aplBgnDy>2013-01-01 00:00:00</aplBgnDy>
    <aplEndDy>2013-02-01 23:59:59</aplEndDy>
    <stdPrdYn>Y/N</stdPrdYn>
    <ProductTag>
      <tagName/>
    </ProductTag>
  </ns2:product>
</ns2:products>

위 응답에는 HTTP 헤더와 XML 데이터가 함께 포함되어 있습니다. 우리가 원하는 것은 XML 부분만 추출하는 것입니다.


2. XML 데이터만 추출하는 방법

PHP에서는 preg_match(), explode(), strpos() 등을 사용하여 XML 부분만 가져올 수 있습니다.

 preg_match()를 활용한 방법

<?php
$response = "(여기에 HTTP 응답 데이터 입력)";

// 정규 표현식을 사용하여 XML 부분 추출
preg_match('/<\?xml.*$/s', $response, $matches);

if (!empty($matches[0])) {
    $xmlContent = $matches[0];
    echo "추출된 XML: \n" . htmlspecialchars($xmlContent);
} else {
    echo "XML 데이터를 찾을 수 없습니다.";
}
?>

 explode()를 이용한 방법

<?php
$response = "(여기에 HTTP 응답 데이터 입력)";

// '<?xml'을 기준으로 나누고 두 번째 요소를 가져옴
$parts = explode('<?xml', $response, 2);
if (count($parts) > 1) {
    $xmlContent = '<?xml' . $parts[1];
    echo "추출된 XML: \n" . htmlspecialchars($xmlContent);
} else {
    echo "XML 데이터를 찾을 수 없습니다.";
}
?>

 strpos()를 활용한 방법

<?php
$response = "(여기에 HTTP 응답 데이터 입력)";

// '<?xml' 문자열의 위치 찾기
$pos = strpos($response, '<?xml');
if ($pos !== false) {
    $xmlContent = substr($response, $pos);
    echo "추출된 XML: \n" . htmlspecialchars($xmlContent);
} else {
    echo "XML 데이터를 찾을 수 없습니다.";
}
?>

3. 방법 비교

방법장점단점

preg_match() 정규 표현식으로 정확한 XML 시작 부분을 찾을 수 있음 정규식을 이해해야 함
explode() 간단한 문자열 분할로 XML을 추출 XML 태그가 중간에 포함될 경우 문제가 발생할 가능성 있음
strpos() 가장 빠른 방식으로 XML을 찾을 수 있음 ‘<?xml’ 문자열이 없을 경우 예외 처리가 필요함

4. 결론

PHP에서 HTTP 응답에서 XML 데이터만 추출하는 방법을 살펴봤습니다. preg_match(), explode(), strpos() 각각의 방법을 비교하여 상황에 맞는 최적의 방법을 선택할 수 있습니다.

이제 XML 데이터를 잘 추출하여 다양한 프로젝트에서 활용해 보세요! 🚀

728x90