DOM 파서가 데이터를 메모리에로드합니다. SAX 파서는 매우 빠르고 효율적인 것으로 확인 된 스트림 파서입니다.
SAX 파에 대한 도전 XML을 통해 스트리밍 할 때 태그 이름을 알고 데이터를 캡처해야합니다.
당신은
... SAX 파서를 사용하도록 설정에 XML (열기 태그)의 시작 요소에 의해 트리거되는 첫 번째 함수를 세 가지 기능이 필요합니다. 이 함수는 여는 태그의 이름과 속성을 반환합니다.
함수의 startElement의 ($ xml_parser, $ 이름 $ 특성)
는 XML (닫는 태그)의 최종 요소에 의해 유발되는 제 2 기능. 이 함수에서는 닫는 태그의 이름 만 반환됩니다.
기능하는 endElement의 ($ xml_parser, $ 이름)
마지막으로, 시작 및 종료 소자 (개폐 태그) 사이에서 스트리밍되는 문자 데이터를 처리하는 제 기능.
기능 CharacterData를 ($의 xml_parser, $ 데이터) 당신이 비행에 필요한 모든 정보를 저장, 작업을 수행하려면 다음 세 가지 기능으로 로직을 넣어해야합니다
. 다른 여는 태그 나 닫는 태그를 사용할 때 CASE 함수를 사용하여 다른 작업을 수행하십시오. 당신이 당신의 기능을 일단
, 당신은 당신은 xml_set_element_handler과 xml_set_character_data_handler 옵션에서 함수 이름을 사용해야합니다 ... 파서를 초기화 할 수 있습니다. 이제
//Initialise SAX parser
$xml_parser = xml_parser_create("UTF-8"); //With UTF8 encoding
//Set parser options
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); //This is a default setting of making all tags uppercase, if set to false you will get the tag name as it's set in the XML.
xml_parser_set_option($xml_parser, XML_OPTION_SKIP_WHITE, true); //This should skip values with no values
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); //Set the output as UTF-8
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
당신이 스트림을 열 수 있습니다 ....
$ XML-> 열기 ('http://www.bookingassist.ro/test/HotelsPro.xml');
그리고 데이터를 구문 분석합니다. 시작 태그, 종료 태그 또는 문자 데이터에 따라 세 가지 기능 중 하나가 트리거됩니다.
while ($data = read($xml, 4096))
{
if (!xml_parse($xml_parser, $data, feof($xml))) {
echo "Error in the XML data\t" . xml_error_string(xml_get_error_code($xml_parser)));
break;
}
}
파서가 완료되면, 자원 .... 예 SAX 아니라고
이
xml_parser_free($xml_parser);
, 그것의 XMLReader와 DOM 사용 해제 - 서로 다른 API를 – ThW