XML 파서(Expat 기반)

XML 파서(Expat 기반)

XML 문서를 파싱해서 특정 이벤트에 맞춰 처리해야 한다면, 이벤트 기반 파서인 XML 파서 확장을 쓸 수 있어요. XML(eXtensible Markup Language)은 웹에서 구조화된 문서를 교환하기 위한 데이터 형식으로, W3C(World Wide Web Consortium)가 정의한 표준이에요. XML과 관련 기술에 대한 정보는 http://www.w3.org/XML/ 에서 찾을 수 있어요.

출처: XML Parser

본문

이 PHP 확장은 PHP에서 James Clark의 expat을 지원해요. 이 툴킷은 XML 문서를 파싱할 수 있지만 검증(validation)은 하지 않아요. PHP에서도 제공하는 세 가지 소스 문자 인코딩, 즉 US-ASCII, ISO-8859-1, UTF-8을 지원하고, UTF-16은 지원하지 않아요.

이 확장으로 XML 파서를 만들고, 각각의 XML 이벤트에 대한 핸들러를 정의할 수 있어요. 각 파서에는 조정할 수 있는 몇 가지 매개변수도 있어요.

XML 파서를 만드는 진입점은 두 함수예요.

  • xml_parser_create — XML 파서를 생성해요
  • xml_parser_create_ns — 네임스페이스 지원이 있는 XML 파서를 생성해요

생성한 파서에 핸들러를 등록하고, xml_parse로 문서 파싱을 시작해요.

핵심 함수

  • xml_parse — XML 문서 파싱을 시작해요
  • xml_parse_into_struct — XML 데이터를 배열 구조로 파싱해요
  • xml_parser_free — XML 파서를 해제해요
  • xml_parser_get_option / xml_parser_set_option — 파서 옵션을 읽고 설정해요

이벤트 핸들러 등록 함수

파서가 문서를 읽으며 만나는 각 이벤트에 반응할 함수를 등록해요.

  • xml_set_element_handler — 시작/끝 요소 핸들러를 설정해요
  • xml_set_character_data_handler — 문자 데이터 핸들러를 설정해요
  • xml_set_processing_instruction_handler — 처리 지시(PI) 핸들러를 설정해요
  • xml_set_default_handler — 기본 핸들러를 설정해요
  • xml_set_external_entity_ref_handler — 외부 엔티티 참조 핸들러를 설정해요
  • xml_set_notation_decl_handler, xml_set_unparsed_entity_decl_handler — 표기법·미파싱 엔티티 선언 핸들러를 설정해요
  • xml_set_start_namespace_decl_handler / xml_set_end_namespace_decl_handler — 네임스페이스 선언 시작/끝 핸들러를 설정해요
  • xml_set_object — 객체 안에서 XML 파서를 사용하게 해요

오류·위치 관련 함수

  • xml_get_error_code — XML 파서 오류 코드를 가져와요
  • xml_error_string — XML 파서 오류 문자열을 가져와요
  • xml_get_current_line_number / xml_get_current_column_number / xml_get_current_byte_index — 현재 파싱 위치를 반환해요

또한 XMLParser 클래스가 제공되며, 다양한 미리 정의된 상수(이벤트 핸들러, 오류 코드, 문자 인코딩, 케이스 폴딩 관련 상수)가 함께 있어요.

더 알아보기

설치 요구 사항, 미리 정의된 상수, 이벤트 핸들러와 오류 코드, 문자 인코딩에 대한 상세 내용은 Installing/Configuring과 각 항목 문서를 확인해 보세요. XML 요소 구조, 태그 매핑, 외부 엔티티, 클래스를 이용한 파싱 예제는 Examples 문서에 있어요.