PHP의 XML_PARSE () 함수를 사용하여 XML 데이터를 구문 분석 할 때 많은 개발자가 일반적인 문제에 직면합니다. "XML 파싱 실패"오류. 이러한 종류의 오류는 종종 잘 형성된 XML 컨텐츠를 다룰 때 혼란스러워집니다. 이 기사는이 문제의 원인을 깊이 분석하고 몇 가지 효과적인 솔루션을 제공합니다.
XML_PARSE () 는 PHP의 XML 파서 확장의 일부이며 이벤트 중심 구문 분석을위한 국외 XML 파서 라이브러리에 의존합니다. 입력 XML은 XML 표준을 완전히 준수해야합니다. 그렇지 않으면 구문 분석 오류가 발생합니다.
구문은 다음과 같습니다.
bool xml_parse(resource $parser, string $data, bool $is_final)
매개 변수 설명 :
$ parser : xml_parser_create () 에 의해 생성 된 파서 리소스.
$ 데이터 : XML 데이터를 구문 분석합니다.
$ is_final : 마지막 데이터인지를 나타냅니다.
가장 일반적인 문제는 XML 자체가 잘못된 형식이라는 것입니다. 예를 들어:
레이블이 닫히지 않았습니다
불법 문자가 사용되었습니다 (예 : & amp; )로 제대로 탈출하지 않습니다.
예를 들어, XML 선언은 공간 이후에 배치됩니다.
$xml = '<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don\'t forget me this weekend.</note>';
위의 예에서는 누락 된 </body> 태그로 인해 구문 분석이 실패합니다.
XML 선언이 UTF-8을 사용하지만 실제 컨텐츠에 UTF-8 인코딩 된 문자가 포함되어 있으면 구문 분석이 실패합니다.
<?xml version="1.0" encoding="UTF-8"?>
컨텐츠에 GBK 인코딩 된 문자가 포함되어 있지만 UTF-8임을 나타냅니다.
URL 또는 파일을 통해 XML 컨텐츠를 읽으면 읽기 실패 또는 부분 데이터 만 읽으면 구문 분석 실패가 발생합니다.
$url = 'https://m66.net/data/feed.xml';
$xmlData = file_get_contents($url);
if ($xmlData === false) {
die("읽다 XML 실패하다");
}
세그먼트에서 큰 XML을 읽으면 XML_PARSE () 의 세 번째 매개 변수 $ is_final을 마지막 호출에서 true 로 설정해야합니다. 설정하지 않으면 "해상도가 완료되지 않은"오류가 발생합니다.
이러한 기능은 구문 분석 오류의 특정 원인을 찾는 데 도움이 될 수 있습니다.
$parser = xml_parser_create();
if (!xml_parse($parser, $xml, true)) {
$errorCode = xml_get_error_code($parser);
$errorMessage = xml_error_string($errorCode);
$line = xml_get_current_line_number($parser);
$column = xml_get_current_column_number($parser);
echo "XML parsing failed: $errorMessage at line $line, column $column";
}
xml_parser_free($parser);
XML 검증 (예 : vs 코드, 숭고한 텍스트, 메모장 ++) 또는 사전 검증을위한 온라인 도구 : https://m66.net/tools/xml-validator 를 지원하는 편집기를 사용하는 것이 좋습니다.
항상 XML 선언의 인코딩이 실제 인코딩과 일치하는지 확인하십시오. UTF-8 인코딩은 파일을 저장할 때 권장되고 명시 적으로 설정됩니다.
XML 소스가 원격 URL 인 경우 요청이 먼저 성공했는지 확인한 다음 구문 분석하는 것이 좋습니다.
$url = 'https://m66.net/api/xml';
$xml = @file_get_contents($url);
if ($xml === false) {
die("리모컨을 얻을 수 없습니다 XML 데이터");
}
원래 XML_PARSE () 와 비교하여 PHP는 SimpleXML과 같은보다 현대적이고 쉬운 XML 구문 분석 방법을 제공합니다.
$xml = simplexml_load_string($xmlData);
if ($xml === false) {
echo "SimpleXML 解析실패하다";
}
또는 domdocument 사용 :
$dom = new DOMDocument();
$success = $dom->loadXML($xmlData);
if (!$success) {
echo "DOMDocument 解析실패하다";
}
두 방법 모두보다 친숙한 오류 프롬프트를 제공하고 XML 노드를보다 쉽게 작동시킬 수 있습니다.
"XML 파싱 실패"오류가 일반적이지만, 그 이유는 체계적인 검사를 통해 종종 명확하게 확인할 수 있습니다. XML 형식 사양을 이해하고 따르고 인코딩 및 도구를 합리적으로 사용하면 구문 분석 성공률을 크게 향상시킬 수 있습니다. 더욱 현대적인 XML 구문 분석 도구를 사용하는 것을 고려하면 개발 프로세스가보다 효율적이고 안정적으로 만들 수 있습니다.
원격 XML 인터페이스를 종종 처리하는 경우 위의 탐지 로직을 기능으로 캡슐화하고 프로젝트에서 재사용하여 견고성을 향상시킬 수 있습니다.