현재 위치: > 최신 기사 목록> XML_PARSE를 사용하여 동적으로 생성 된 XML 데이터를 구문 분석하십시오

XML_PARSE를 사용하여 동적으로 생성 된 XML 데이터를 구문 분석하십시오

M66 2025-05-11

PHP에는 DOM, SimpleXML 또는 XML 파서 사용과 같은 XML 데이터를 구문 분석하는 방법에는 여러 가지가 있습니다. 이 기사는 XML 파서와 함께 기본 XML_PARSE () 함수를 사용하여 처리하는 방법을 소개합니다.

xml_parse () 란 무엇입니까?

XML_PARSE () 는 PHP의 XML 확장 기능 중 하나이며 XML 문자열을 구문 분석을 위해 구문 분석기에 공급하는 데 사용됩니다. xml_parser_create () , xml_set_element_handler () 와 같은 함수와 함께 사용되며 레이블 구조를 미세하게 제어 해야하는 시나리오를 처리하는 데 적합합니다.

샘플 시나리오 : 원격 주소에서 XML 데이터를 가져옵니다

XML을 동적으로 생성하는 인터페이스가 있다고 가정합니다.

 https://api.m66.net/data/feed.xml

이 주소에서 XML 데이터를 가져 와서 <item> 태그 아래 제목링크 필드를 구문 분석하려고합니다.

샘플 코드

 <?php

// 초기화 파서
$parser = xml_parser_create();

// 데이터 저장을위한 배열
$parsedData = [];
$currentTag = '';
$currentItem = [];

// 시작 태그 프로세서를 정의하십시오
function startElement($parser, $name, $attrs) {
    global $currentTag, $currentItem;
    $currentTag = strtolower($name);
    if ($currentTag === 'item') {
        $currentItem = [];
    }
}

// 엔드 태그 프로세서를 정의하십시오
function endElement($parser, $name) {
    global $currentTag, $currentItem, $parsedData;
    if (strtolower($name) === 'item') {
        $parsedData[] = $currentItem;
    }
    $currentTag = '';
}

// 문자 데이터 프로세서를 정의합니다
function characterData($parser, $data) {
    global $currentTag, $currentItem;
    $data = trim($data);
    if (!$data) return;

    if ($currentTag === 'title') {
        $currentItem['title'] = (isset($currentItem['title']) ? $currentItem['title'] : '') . $data;
    } elseif ($currentTag === 'link') {
        $currentItem['link'] = (isset($currentItem['link']) ? $currentItem['link'] : '') . $data;
    }
}

// 프로세서를 설정하십시오
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

// 리모컨에서 얻으십시오 XML 콘텐츠
$url = "https://api.m66.net/data/feed.xml";
$xmlData = file_get_contents($url);

if (!$xmlData) {
    die("얻을 수 없습니다 XML 데이터");
}

// 구문 분석을 시작하십시오
if (!xml_parse($parser, $xmlData, true)) {
    die(sprintf("XML 실수: %s 에서 %d 좋아요",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
}

// 파서 자원을 해제합니다
xml_parser_free($parser);

// 출력 결과
echo "<pre>";
print_r($parsedData);
echo "</pre>";
?>

출력 예제

 Array
(
    [0] => Array
        (
            [title] => 샘플 제목1
            [link] => https://www.m66.net/item/123
        )
    [1] => Array
        (
            [title] => 샘플 제목2
            [link] => https://www.m66.net/item/456
        )
)

요약

XML_PARSE ()를 사용하여 XML 데이터 구조를 완전히 제어 할 수 있으며 복잡한 또는 비표준 구조 XML 파일에 적합합니다. SimpleXML만큼 간결하지는 않지만 사용자 정의 처리 흐름이 필요한 시나리오에 매우 유용합니다.