>백엔드 개발 >XML/RSS 튜토리얼 >PHP 확장의 XML 작업(2) - XML ​​파서 설치 및 개요

PHP 확장의 XML 작업(2) - XML ​​파서 설치 및 개요

黄舟
黄舟원래의
2017-02-13 14:53:292112검색



1. 개요 및 설치

XML(eXtensible Markup Language)은 구조화된 문서와 상호 작용하기 위한 A 데이터 형식입니다. W3C(Internet Society)에서 정의한 표준입니다. XML 및 관련 기술에 대한 정보는 //m.sbmmt.com/에서 확인할 수 있습니다.

이 PHP 확장 구현은 James Clark이 PHP로 작성한 expat를 지원합니다. 이 툴킷은 XML 문서를 구문 분석할 수 있지만 유효성을 검사할 수는 없습니다. PHP에서 제공하는 US-ASCII, ISO-8859-1 및 UTF-8의 3가지 문자 인코딩을 지원합니다. UTF-16은 지원되지 않습니다.

이 확장은 XML 파서를 생성하고 다양한 XML 이벤트에 대한 처리기를 정의합니다. 각 XML 파서에는 조정할 수 있는 몇 가지 매개변수도 있습니다.

이 확장에는 libxml PHP 확장이 필요합니다. 이는 --enable-libxml을 사용해야 함을 의미합니다. 단, libxml이 기본적으로 활성화되어 있으므로 이 작업은 암시적으로 수행됩니다.

기본적으로 이 확장 프로그램은 expat compat 레이어를 사용합니다. expat를 사용할 수도 있습니다. 이 라이브러리는 //m.sbmmt.com/에 있습니다. expat 라이브러리에서 Makefile을 사용하면 기본적으로 라이브러리 파일이 빌드되지 않습니다.


libexpat.a: $(OBJS)
    ar -rc $@ $(OBJS)
    ranlib $@

expat의 소스코드 RPM 설치 패키지는 //m.sbmmt.com/에서 확인하실 수 있습니다.

이 확장은 기본적으로 활성화되어 있으며 컴파일 시 다음 옵션을 통해 비활성화할 수 있습니다: --disable-xml

이러한 기능은 기본적으로 활성화되어 있으며 번들로 제공되는 국외 거주자 도서관 . --disable-xml 매개변수를 통해 XML 지원을 비활성화할 수 있습니다. PHP를 Apache 1.3.9 이상용 모듈로 컴파일하면 PHP는 자동으로 Apache와 함께 번들로 제공되는 expat 라이브러리를 사용합니다. 번들로 제공되는 expat 라이브러리를 사용하지 않으려면 PHP의 구성 구성 스크립트를 실행할 때 --with-expat-dir=DIR 매개변수를 사용하세요. 여기서 DIR은 expat 설치의 루트 디렉터리를 가리켜야 합니다. .

Windows 버전의 PHP에는 이 확장 기능이 내장되어 있습니다. 이러한 기능을 사용하기 위해 추가 확장을 로드할 필요는 없습니다.

2. 이벤트 핸들러

XML 이벤트 핸들러의 정의는

被支持的 XML 处理器
PHP 处理器函数 事件描述
xml_set_element_handler() 当 XML 解析器遇到开始或结束标签时,会触发元素事件。 开始标签和结束标签有不同的处理器。
xml_set_character_data_handler() 字符数据范指 XML 文档中所有非标记的内容,包括标签之间的空格。 注意,XML 解析器不会添加或删除任何空格,由应用程序(你)来判断空格是否有意义。
xml_set_processing_instruction_handler() PHP 程序员必须熟练掌握处理指令(PI)。是处理指令, 其中php被称为“处理指令对象”。 除所有以“XML”开头的处理指令对象是系统保留的外, 其他的处理函数均是由应用程序指定的。
xml_set_default_handler() 不执行其他处理函数,则会执行缺省的处理函数。 在缺省的处理函数中可取得如 XML 和文档类型声明等信息。
xml_set_unparsed_entity_decl_handler() 未解析的实体声明(NDATA)会调用此处理函数。
xml_set_notation_decl_handler() 符号声明会调用此处理函数
xml_set_external_entity_ref_handler() 当 XML 解析器发现对外部已解析的普通实体的引用时, 会调用此处理函数。例如,引用一个文件或URL。实例可参见 XML 外部实体例程。
지원되는 XML 핸들러
PHP 핸들러 함수 이벤트 설명
xml_set_element_handler( ) td> XML 파서가 열기 또는 닫기 태그를 발견하면 요소 이벤트가 트리거됩니다. 열린 태그와 닫는 태그에는 서로 다른 핸들러가 있습니다.
xml_set_character_data_handler() 문자 데이터 범위는 태그 사이의 공백을 포함하여 XML 문서에서 태그가 지정되지 않은 모든 콘텐츠를 나타냅니다. XML 파서는 공백을 추가하거나 제거하지 않으며 공백이 의미가 있는지 여부를 결정하는 것은 응용 프로그램(사용자)의 몫입니다.
xml_set_processing_instruction_handler() PHP 프로그래머는 처리 명령(PI)에 능숙해야 합니다. 는 처리 명령이며, 여기서 php는 "처리 명령 개체"라고 합니다. 시스템에 의해 예약된 "XML"로 시작하는 모든 처리 명령 개체를 제외하고 다른 처리 기능은 응용 프로그램에 의해 지정됩니다.
xml_set_default_handler() 다른 처리 함수가 실행되지 않으면 기본 처리 함수가 실행됩니다. XML 및 문서 유형 선언과 같은 정보는 기본 핸들러 함수에서 사용할 수 있습니다.
xml_set_unparsed_entity_decl_handler() 분석되지 않은 엔터티 선언(NDATA)은 이 핸들러 함수를 호출합니다.
xml_set_notation_decl_handler() 기호 선언은 이 핸들러 함수를 호출합니다
xml_set_external_entity_ref_handler() td> 이 핸들러는 XML 파서가 외부 구문 분석 일반 엔터티에 대한 참조를 찾을 때 호출됩니다. 예를 들어 파일이나 URL을 참조하세요. 예제는 XML 외부 엔터티 루틴에서 찾을 수 있습니다.

3. 대문자 변환

요소 처리 기능은 요소 이름을 대소문자 구분(대문자) 형식으로 변환할 수 있습니다. 대소문자 접기는 "대문자가 아닌 문자를 해당 대문자로 바꾸는 문자열 작업"으로 정의됩니다. 즉, XML에서는 대소문자 구분이 대문자로 변환됩니다.

기본적으로 핸들러를 통해 전달된 모든 요소 이름은 대문자로 변환됩니다. 각 XML 파서는 각각 xml_parser_get_option() 및 xml_parser_set_option() 함수를 통해 이 함수를 쿼리하고 제어할 수 있습니다.

4. 오류 코드

다음 상수는 XML 관련 오류 코드(xml_parse() 함수의 반환 값)입니다:

  • XML_ERROR_NONE

  • XML_ERROR_NO_MEMORY

  • XML_ERROR_SYNTAX

  • XML_ERROR_NO_ELEMENTS

  • XML_ERROR_INVALID_TOKEN

  • XML_ERROR_UNCLOSED_TOKEN

  • XML_ERR OR_PARTIAL_CHAR

  • XML_ ERROR_TAG_MISMATCH

  • XML_ERROR_DUPLICATE_ATTRIBUTE

  • XML_ERROR_JUNK_AFTER_DOC_ELEMENT

  • ML_ERROR_UNDEFINED_ENTITY

  • XML_ERROR_RECURSIVE_ENTITY_REF

  • XML_ERROR_ASYNC_ENTITY

  • XML_ERROR_BAD_CHAR_REF

  • XML_ERROR_BINARY_ENTITY_REF

  • XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF

  • XML_ERROR_MISPLACED_XML_PI

  • XML_ERROR_UNKNOWN_ENCODING

  • XML_ERROR_INCORRECT_ENCODING

  • XML_ERROR_UNCLOSED_CDATA_SECTION
  • XML_EXTERNAL_EXTITY_HANDLING
  • 몇 가지 차이점 문자 인코딩은 유니코드 문자 집합을 지원합니다. 문자 인코딩에는 원본 인코딩과 대상 인코딩의 두 가지 유형이 있습니다. PHP의 내부 표현에서 문서는 항상 UTF-8로 인코딩됩니다.
  • XML을 파싱하면 원본 인코딩이 완료됩니다. XML 파서를 생성할 때 원래 인코딩을 지정할 수 있습니다. 이 인코딩은 나중에 XML 파서의 수명 주기에서 수정할 수 없습니다. 지원되는 원시 인코딩은 ISO-8859-1, US-ASCII 및 UTF-8입니다. 처음 두 개는 단일 바이트 인코딩입니다. 즉, 각 문자는 1바이트로 표시됩니다. UTF-8은 문자를 1~4바이트로 배열된 일련의 가변 수(최대 21개) 비트로 인코딩할 수 있습니다. PHP에서 사용되는 기본 원시 인코딩은 ISO-8859-1입니다.

  • PHP가 데이터를 XML 처리 함수에 전달하면 대상 인코딩이 완료됩니다. XML 프로세서를 생성할 때 대상 인코딩은 원본 인코딩과 동일하게 설정되지만 마음대로 수정할 수 있습니다. 대상 인코딩은 문자 데이터와 태그 이름은 물론 처리 명령 대상에도 영향을 미칩니다.

XML 파서가 원래 인코딩이 나타낼 수 있는 범위를 벗어나는 문자를 발견하면 오류를 반환합니다.

PHP가 구문 분석된 XML 문서에서 지정된 대상 인코딩으로 표현할 수 없는 문자를 발견하면 문제 문자가 "다운그레이드"됩니다. 일반적으로 해당 문자는 물음표(?)로 대체됩니다.

위는 PHP 확장의 XML 연산(2) - XML ​​파서 설치 및 개요입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.