xml.sax — SAX2 구문 분석기 지원

소스 코드: Lib/xml/sax/__init__.py


xml.sax 패키지는 파이썬용 SAX(Simple API for XML) 인터페이스를 구현하는 여러 모듈을 제공합니다. 패키지 자체는 대부분 SAX API의 사용자가 사용하게 될 SAX 예외와 편리 함수를 제공합니다.

경고

xml.sax 모듈은 악의적으로 구성된 데이터로부터 안전하지 않습니다. 신뢰할 수 없거나 인증되지 않은 데이터를 구문 분석해야 하면 XML 취약점을 참조하십시오.

버전 3.7.1에서 변경: SAX 구문 분석기는 보안을 강화하기 위해 더는 일반 외부 엔티티를 처리하지 않습니다. 이전에는, 구문 분석기가 DTD와 엔티티에 대해 네트워크 연결을 만들어 원격 파일을 가져오거나 파일 시스템에서 로컬 파일을 로드했습니다. 이 기능은 구문 분석기 객체에 대해 인자 feature_external_ges로 메서드 setFeature()를 사용하여 다시 활성화할 수 있습니다.

편리 함수는 다음과 같습니다:

xml.sax.make_parser(parser_list=[])

SAX XMLReader 객체를 만들고 반환합니다. 발견된 첫 번째 구문 분석기가 사용됩니다. parser_list가 제공되면, create_parser()라는 함수가 있는 모듈의 이름을 나타내는 문자열 리스트여야 합니다. parser_list에 나열된 모듈은 기본 구문 분석기 목록에 있는 모듈보다 먼저 사용됩니다.

xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())

SAX 구문 분석기를 만들어 문서 구문 분석에 사용합니다. filename_or_stream으로 전달된 문서는 파일명이나 파일 객체일 수 있습니다. handler 매개 변수는 SAX ContentHandler 인스턴스여야 합니다. error_handler가 주어지면, SAX ErrorHandler 인스턴스여야 합니다; 생략하면, 모든 에러에서 SAXParseException이 발생합니다. 반환 값은 없습니다; 모든 작업은 전달된 handler가 처리해야 합니다.

xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())

parse()와 비슷하지만, 매개 변수로 받은 버퍼 string에서 구문 분석합니다. stringstr 인스턴스나 바이트열류 객체여야 합니다.

버전 3.5에서 변경: str 인스턴스에 대한 지원이 추가되었습니다.

전형적인 SAX 응용 프로그램은 입력기(reader), 처리기(handler) 및 입력 소스(input source)의 세 가지 종류의 객체를 사용합니다: 이 문맥에서 “입력기(Reader)”는 구문 분석기에 대한 또 다른 용어입니다, 즉, 입력 소스에서 바이트나 문자를 읽고, 이벤트 시퀀스를 생성하는 코드 조각입니다. 그런 다음 이벤트는 처리기 객체로 배포됩니다, 즉 입력기가 처리기의 메서드를 호출합니다. 따라서 SAX 응용 프로그램은 입력기 객체를 얻고, 입력 소스를 만들거나 열고, 처리기를 만들고, 이 객체들을 모두 연결해야 합니다. 준비의 마지막 단계로, 입력기가 입력을 구문 분석하도록 호출됩니다. 구문 분석하는 동안, 처리기 객체의 메서드는 입력 데이터로부터 온 구조적 및 구문적 이벤트를 기반으로 호출됩니다.

이러한 객체들은, 인터페이스만 중요합니다; 그들은 일반적으로 응용 프로그램 자체에 의해 인스턴스로 만들어지지 않습니다. 파이썬에는 인터페이스에 대한 명시적인 개념이 없으므로, 이것들이 형식적으로는 클래스로 소개되지만, 응용 프로그램은 제공된 클래스를 상속하지 않는 구현을 사용할 수 있습니다. InputSource, Locator, Attributes, AttributesNSXMLReader 인터페이스는 모듈 xml.sax.xmlreader에 정의되어 있습니다. 처리기 인터페이스는 xml.sax.handler에 정의되어 있습니다. 편의상, InputSource(종종 직접 인스턴스를 만듭니다)와 처리기 클래스들은 xml.sax에서도 사용할 수 있습니다. 이러한 인터페이스는 아래에 설명되어 있습니다.

이러한 클래스 외에도, xml.sax는 다음과 같은 예외 클래스를 제공합니다.

exception xml.sax.SAXException(msg, exception=None)

XML 에러나 경고를 캡슐화합니다. 이 클래스에는 XML 구문 분석기나 응용 프로그램의 기본 에러나 경고 정보가 포함될 수 있습니다: 추가 기능을 제공하거나 지역화를 추가하기 위해 서브 클래싱 될 수 있습니다. ErrorHandler 인터페이스에 정의된 처리기가 이 예외의 인스턴스를 수신하지만, 예외를 실제로 발생시킬 필요는 없음에 유의하십시오 — 정보를 담는 컨테이너로도 유용합니다.

인스턴스로 만들어질 때, msg는 사람이 읽을 수 있는 에러에 관한 설명이어야 합니다. 선택적 exception 매개 변수를 주면, None이거나 구문 분석 코드에 의해 잡힌 예외여야 하고, 정보로 함께 전달됩니다.

이것은 다른 SAX 예외 클래스의 베이스 클래스입니다.

exception xml.sax.SAXParseException(msg, exception, locator)

구문 분석 에러 시 발생하는 SAXException의 서브 클래스. 이 클래스의 인스턴스는 SAX ErrorHandler 인터페이스의 메서드에 전달되어 구문 분석 에러에 대한 정보를 제공합니다. 이 클래스는 SAXException 인터페이스뿐만 아니라 SAX Locator 인터페이스를 지원합니다.

exception xml.sax.SAXNotRecognizedException(msg, exception=None)

SAX XMLReader가 인식할 수 없는 기능이나 속성을 만날 때 발생하는 SAXException의 서브 클래스. SAX 응용 프로그램과 확장은 유사한 목적으로 이 클래스를 사용할 수 있습니다.

exception xml.sax.SAXNotSupportedException(msg, exception=None)

SAX XMLReader가 지원되지 않는 기능을 활성화하거나 구현에서 지원하지 않는 값으로 속성을 설정하도록 요청될 때 발생하는 SAXException의 서브 클래스. SAX 응용 프로그램과 확장은 유사한 목적으로 이 클래스를 사용할 수 있습니다.

더 보기

SAX: The Simple API for XML

이 사이트는 SAX API의 정의가 집중되는 곳입니다. Java 구현과 온라인 설명서를 제공합니다. 구현과 역사적 정보에 대한 링크도 있습니다.

모듈 xml.sax.handler

응용 프로그램이 제공하는 객체에 대한 인터페이스의 정의.

모듈 xml.sax.saxutils

SAX 응용 프로그램에서 사용하기 위한 편리 함수.

모듈 xml.sax.xmlreader

구문 분석기가 제공하는 객체에 대한 인터페이스의 정의.

SAXException 객체

SAXException 예외 클래스는 다음 메서드를 지원합니다:

SAXException.getMessage()

에러 상태를 설명하는 사람이 읽을 수 있는 메시지를 반환합니다.

SAXException.getException()

캡슐화된 예외 객체나 None을 반환합니다.