현재 위치: > 최신 기사 목록> XML_PARSE와 일반 표현식 결합하여 XML 데이터의 소음 정보를 정리

XML_PARSE와 일반 표현식 결합하여 XML 데이터의 소음 정보를 정리

M66 2025-04-26

XML 데이터를 처리 할 때 종종 "노이즈 정보"를 만날 수 있습니다. 이는 CDATA에 중첩 된 불법 문자, 쓸모없는 태그, 댓글 또는 더러운 데이터 일 수 있습니다. 데이터 구문 분석의 정확성을 보장하기 위해 PHP의 XML_PARSE 기능을 사용하여 XML 컨텐츠를 전제로 처리하여 이러한 간섭 항목을 지우고 구문 분석 효율 및 데이터 신뢰성을 향상시킬 수 있습니다.

1. XML_PARSE 기능을 이해하십시오

XML_PARSE 는 PHP에서 제공하는 기본 XML 파서이며, 이는 국외 XML 파서를 기반으로합니다. 콜백 함수를 통해 세그먼트 및 프로세스 노드별로 XML 문자열 세그먼트를 읽을 수 있습니다. 그러나 XML_PARSE는 XML 형식에 대해 매우 높은 요구 사항을 가지고 있습니다. XML에 불법 문자 나 형식 오류가 있으면 직접 실패로 돌아갑니다.

예제 사용은 다음과 같습니다.

 $xml_parser = xml_parser_create();

xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

$xml_data = file_get_contents("https://m66.net/sample.xml");

if (!xml_parse($xml_parser, $xml_data, true)) {
    die("XML 분석이 실패했습니다: " . xml_error_string(xml_get_error_code($xml_parser)));
}

xml_parser_free($xml_parser);

function startElement($parser, $name, $attrs) {
    echo "시작 요소: $name\n";
}

function endElement($parser, $name) {
    echo "결말 요소: $name\n";
}

function characterData($parser, $data) {
    echo "데이터 컨텐츠: $data\n";
}

이 코드는 원격 XML을 읽고 콜백 함수를 사용하여 각 태그와 데이터 노드를 단계별로 처리합니다. 그러나 XML에 제어 문자 또는 불완전한 CDATA 노드와 같은 불법 문자가 포함되어 있으면 구문 분석 실패가 발생합니다.

2. 정규 표현식을 사용하여 소음 정보를 정리하십시오

XML_PARSE가 올바르게 작동하려면 XML의 노이즈 정보를 구문 분석하기 전에 청소해야합니다. 이것은 정규 표현식으로 효율적으로 수행 할 수 있습니다. 일반적인 "소음"은 다음과 같습니다.

  • 제어 문자 (예 : ASCII 0-31)

  • 불법 HTML 주석 (예 : <! ----> 또는 포함 스크립트 포함)

  • 중첩 된 잘못된 태그

  • 여분의 공백 또는 라인 브레이크

몇 가지 처리 예는 다음과 같습니다.

 function cleanXmlData($xml) {
    // 불법 제어 문자를 제거하십시오
    $xml = preg_replace('/[^\x09\x0A\x0D\x20-\x7E\xA0-\xFF]/u', '', $xml);
    
    // 주석 내용을 제거하십시오
    $xml = preg_replace('/<!--.*?-->/s', '', $xml);

    // 유효하지 않은 빈 태그 형식을 교체하십시오
    $xml = preg_replace('/<(\w+)[^>]*>\s*<\/\1>/', '', $xml);

    // 정리 CDATA 스크립트를 숨기거나 내용을 주입하십시오
    $xml = preg_replace('/<!\[CDATA\[(.*?)\]\]>/s', function($matches) {
        $content = $matches[1];
        // 필요에 따라 내용을 필터링 할 수 있습니다,예를 들어, 제거하십시오 <script>
        $content = preg_replace('/<script.*?>.*?<\/script>/is', '', $content);
        return "<![CDATA[$content]]>";
    }, $xml);

    return $xml;
}

3. 결합 된 세정 및 분석

정리 단계와 XML 파서 통합 :

 $raw_xml = file_get_contents("https://m66.net/raw-feed.xml");

$clean_xml = cleanXmlData($raw_xml);

$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

if (!xml_parse($parser, $clean_xml, true)) {
    die("정리后 XML 분석이 실패했습니다: " . xml_error_string(xml_get_error_code($parser)));
}

xml_parser_free($parser);

이러한 방식으로 원래 XML 파일에 시끄러운 정보가 있더라도 청소 후 성공적으로 구문 분석하여 시스템 안정성을 향상시킬 수 있습니다.

4. 요약

XML_PARSE 와 정규 표현식의 청소 방법을 결합하면 XML 데이터 처리에서 결함 허용 오류가 크게 향상 될 수 있습니다. 규칙 성은 약하게 구조화 된 "더러운"데이터를 처리 할 수 ​​있으며 XML_PARSE는 잘 구조화 된 XML 문서를 효율적으로 처리 할 수 ​​있습니다. 이 둘의 조합은 로그 분석, 데이터 수집, API 게이트웨이 등과 같은 시스템 시나리오에 적합합니다. XML에 크게 의존합니다.

항상 기억하십시오 : 데이터 전처리는 성공적인 구문 분석의 첫 번째 단계입니다.