xml_set_end_namespace_decl_handler 함수의 기본 구문은 다음과 같습니다.
bool xml_set_end_namespace_decl_handler(resource $parser, callable $handler);
$ parser : 이것은 XML_PARSER_CREATE 함수를 통해 생성 된 XML 파서 리소스입니다.
$ 핸들러 : 네임 스페이스가 끝나면 콜백 함수가 트리거됩니다. 이 함수는 네임 스페이스의 $ parser 와 접두사 의 두 매개 변수를 사용합니다.
간단한 예 :
<?php
// 만들다XML파서
$parser = xml_parser_create();
// 네임 스페이스 끝에서 콜백 함수를 정의하십시오
function end_namespace_handler($parser, $prefix) {
echo "Namespace '$prefix' has ended.\n";
}
// 콜백 함수를 설정하십시오
xml_set_end_namespace_decl_handler($parser, 'end_namespace_handler');
// 예XML데이터
$xml = '<root xmlns:foo="http://example.com"><foo:bar></foo:bar></root>';
// 분석XML
xml_parse($parser, $xml);
// 释放파서
xml_parser_free($parser);
?>
위의 코드가 출력됩니다.
Namespace 'foo' has ended.
xml_set_end_namespace_decl_handler 콜백 함수가 올바르게 실행되도록하려면 일부 디버깅 기술을 사용하여 잠재적 인 문제를 해결할 수 있습니다.
먼저 XML_PARSER_CREATE가 파서를 성공적으로 생성하는지 확인하십시오. 파서를 만들기 전에 먼저 반환 값을 확인하여 거짓이 아닌지 확인할 수 있습니다.
<?php
$parser = xml_parser_create();
if (!$parser) {
echo "Failed to create XML parser.\n";
exit;
}
?>
콜백 함수에서는 var_dump 또는 echo를 사용하여 $ prefix 및 기타 디버깅 정보를 출력 할 수 있습니다. 이를 통해 콜백 기능이 올바르게 호출되는지 확인하는 데 도움이 될 수 있습니다.
function end_namespace_handler($parser, $prefix) {
echo "Namespace '$prefix' has ended.\n";
var_dump($prefix);
}
XML 문서를 구문 분석하면 구문 오류가 발생하거나 XML 데이터가 잘못 형성 될 수 있습니다. 디버깅을 용이하게하기 위해 구문 분석 중에 오류 처리 메커니즘을 추가하고 XML_GET_ERROR_CODE를 사용하여 자세한 오류 정보를 얻을 수 있습니다.
<?php
// 만들다파서
$parser = xml_parser_create();
// 오류 처리
function handle_error($parser) {
$error_code = xml_get_error_code($parser);
echo "Error: " . xml_error_string($error_code) . "\n";
exit;
}
// 네임 스페이스 엔드 콜백을 설정합니다
xml_set_end_namespace_decl_handler($parser, 'end_namespace_handler');
// 예无效XML
$xml = '<root xmlns:foo="http://example.com"><foo:bar></foo:bar>';
// 분석XML오류를 확인하십시오
if (!xml_parse($parser, $xml)) {
handle_error($parser);
}
// 释放파서
xml_parser_free($parser);
?>
네임 스페이스가 포함 된 XML 데이터를 처리 할 때 $ 접두사는 네임 스페이스가없는 요소를 나타내는 빈 문자열 일 수 있습니다. 불필요한 오류를 피하려면 콜백 기능에서이를 처리하십시오.
function end_namespace_handler($parser, $prefix) {
if (empty($prefix)) {
echo "No namespace prefix declared.\n";
} else {
echo "Namespace '$prefix' has ended.\n";
}
}
xml_set_end_namespace_decl_handler를 사용하는 경우 콜백 함수는 합법적 인 호출 기능이어야합니다. is_callable을 사용하여 콜백 함수가 유효한지 확인할 수 있습니다.
<?php
$parser = xml_parser_create();
$handler = 'end_namespace_handler';
if (!is_callable($handler)) {
echo "Handler function '$handler' is not callable.\n";
exit;
}
xml_set_end_namespace_decl_handler($parser, $handler);
// 분석XML
$xml = '<root xmlns:foo="http://example.com"><foo:bar></foo:bar></root>';
xml_parse($parser, $xml);
xml_parser_free($parser);
?>