현재 위치: > 최신 기사 목록> XML_PARSE 및 CURL 결합하여 XML 데이터 다운로드 및 구문 분석

XML_PARSE 및 CURL 결합하여 XML 데이터 다운로드 및 구문 분석

M66 2025-05-13

매일 PHP 개발에서는 종종 원격 서버에서 XML 데이터를 얻고 구문 분석해야합니다. 이 기사에서는 CURL을 사용하여 XML 데이터를 다운로드 한 다음 XML_PARSE 시리즈 기능과 함께 컨텐츠를 구문 분석하고 사용 가능한 배열 구조로 변환하는 방법을 보여줍니다.

1. 준비 : 필요한 확장을 활성화합니다

먼저 PHP 환경에서 다음 확장이 활성화되어 있는지 확인하십시오.

  • CURL : 데이터를 원격으로 다운로드하는 데 사용됩니다

  • XML 파서 : XML 문서를 구문 분석하는 데 사용됩니다

이 두 확장은 내장되어 있으며 추가 설치가 필요하지 않은 대부분의 PHP 설치 패키지에 기본값입니다.

2. 컬을 사용하여 XML 데이터를 얻으십시오

Curl을 통해 원격 주소에서 XML 컨텐츠를 먼저 다운로드하겠습니다.

 function fetchXmlData($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    $data = curl_exec($ch);

    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
        return false;
    }

    curl_close($ch);
    return $data;
}

// 예 URL
$url = 'https://api.m66.net/data/sample.xml';
$xmlContent = fetchXmlData($url);

if ($xmlContent === false) {
    exit('얻다 XML 실패하다');
}

3. XML_PARSE를 사용하여 XML 데이터를 구문 분석하십시오

PHP의 XML_PARSE 기능은 이벤트 중심 XML 구문 분석 방법입니다. 파서를 생성하고 처리 기능을 설정하여 XML 컨텐츠를 구조적 배열로 변환 할 수 있습니다.

 function parseXmlToArray($xml) {
    $parser = xml_parser_create();
    $values = [];
    $index = [];

    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

    if (!xml_parse_into_struct($parser, $xml, $values, $index)) {
        echo "XML 구문 분석 오류: " . xml_error_string(xml_get_error_code($parser));
        xml_parser_free($parser);
        return false;
    }

    xml_parser_free($parser);
    return buildXmlArray($values);
}

function buildXmlArray($values) {
    $result = [];
    $stack = [];

    foreach ($values as $val) {
        switch ($val['type']) {
            case 'open':
                $tag = $val['tag'];
                $child = [];
                if (isset($val['attributes'])) {
                    $child['@attributes'] = $val['attributes'];
                }
                $child['@children'] = [];
                $stack[] = [&$result];
                $result[$tag][] = &$child;
                $result = &$child['@children'];
                break;

            case 'complete':
                $tag = $val['tag'];
                $entry = isset($val['value']) ? $val['value'] : '';
                if (isset($val['attributes'])) {
                    $result[$tag][] = [
                        '@attributes' => $val['attributes'],
                        '@value' => $entry
                    ];
                } else {
                    $result[$tag][] = $entry;
                }
                break;

            case 'close':
                $result = &$stack[count($stack) - 1][0];
                array_pop($stack);
                break;
        }
    }

    return $result;
}

4. 완전한 예 : 다운로드에서 분석으로

위의 두 부분을 결합하여 완전한 "다운로드 + 구문 분석"프로세스를 구현할 수 있습니다.

 $url = 'https://api.m66.net/data/sample.xml';
$xmlContent = fetchXmlData($url);

if ($xmlContent) {
    $parsedData = parseXmlToArray($xmlContent);
    echo "<pre>";
    print_r($parsedData);
    echo "</pre>";
}

5. 요약

이 기사를 통해 PHP의 컬 확장을 사용하여 XML 데이터를 다운로드하는 방법과 XML_PARSE를 사용하여 구조화 된 배열로 구문 분석하는 방법을 마스터했습니다. XML_PARSE 는 낮은 수준의 방법이지만 성능이 높고 종속성이 거의 없으므로 성능 요구 사항이있는 프로젝트에 적합합니다.

보다 복잡한 XML을 처리 해야하는 경우 향후 SimpleXML 또는 Domdocument 와 같은 고급 파서를 사용하는 것이 좋습니다.