최근 소규모 프로젝트를 진행하면서 웹 서비스의 xml 데이터만 제공하는 일부 병원 시스템에서 데이터를 검색해야 했습니다.
프로그램 디버깅 마지막 날 시연을 하려고 했을 때 XML에 추가 '<'가 있어서 XML을 파싱할 수 없다는 것을 발견했습니다. 여러 가지 방법을 찾았어요!
1. Stripos() 함수를 사용하여 포함된 xml 태그의 시작 위치를 찾습니다.
2. substr() 함수를 통해 태그를 차단합니다.
3. str_replace() 함수를 통해 태그를 교체합니다.
이 방법은 다소 번거롭기는 하지만 여전히 아이디어는 매우 명확하지만 나중에 XML에 '<'가 포함된 태그가 여러 개 있는 경우 이 방법이 그다지 유용하지 않다는 것을 알았습니다.
그래서 일반 콜백 방식을 생각해냈습니다:
function search($match){
$match = str_replace("<", "@", $match[1 ]);
return $match;
}
//$xml = simplexml_load_file("tes.xml"); //xml 파일 읽기
$xml_str=file_get_contents("test.xml" ) ;
$xml_result=preg_replace_callback("/(.*?)/s", "search", $xml_str);//일반 콜백
$xml = simplexml_load_string( $ xml_result);
print_r($xml);exit;
아이디어를 간략하게 설명합니다.
주로 일반 콜백을 사용하여 꺾쇠 괄호를 @로 바꿉니다. 검색할 때 @를 <
로 바꾸면 됩니다. ! !
위 내용은 PHP에서 webservice를 호출할 때 xml을 파싱할 때 발생하는 문제에 대한 해결 방법을 관련 내용과 함께 소개하고 있으니 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.