xml.parsers.expat — Expat 을 사용한 빠른 XML 파싱
xml.parsers.expat — Expat 을 사용한 빠른 XML 파싱
xml.parsers.expat 모듈은 비검증(non-validating) XML 파서인 Expat 에 대한 파이썬 인터페이스예요. 이 모듈은 XML 파서의 현재 상태를 나타내는 단일 확장 타입 xmlparser 를 제공해요. xmlparser 객체를 만든 뒤 객체의 다양한 속성을 핸들러 함수로 설정할 수 있어요. XML 문서가 파서에 공급되면 그 문자 데이터와 마크업에 대해 핸들러 함수가 호출돼요.
본문
이 모듈은 Expat 파서 접근을 제공하는 pyexpat 모듈을 사용해요. pyexpat 모듈을 직접 사용하는 것은 비권장(deprecated)이에요.
참고: 신뢰할 수 없거나 인증되지 않은 데이터를 파싱해야 한다면 XML 보안을 참고하세요.
예외, 타입 객체, 데이터 항목
- exception xml.parsers.expat.ExpatError — Expat 이 오류를 보고할 때 발생하는 예외.
- exception xml.parsers.expat.error —
ExpatError의 별칭. - xml.parsers.expat.XMLParserType —
ParserCreate()함수의 반환 값 타입. - xml.parsers.expat.EXPAT_VERSION — 인터프리터가 로드한 Expat 라이브러리의 버전 문자열(예:
'expat_2.8.4'). - xml.parsers.expat.version_info — 로드된 Expat 버전을 (major, minor, micro) 세 정수 튜플로.
- xml.parsers.expat.features — 로드된 Expat 라이브러리가 컴파일된 기능 목록을
(name, value)쌍으로.
함수 (Functions)
- xml.parsers.expat.ErrorString(errno) — 주어진 오류 번호 errno 에 대한 설명 문자열을 반환해요.
- xml.parsers.expat.ParserCreate(encoding=None, namespace_separator=None, intern=None) — 새
xmlparser객체를 만들어 반환해요. encoding 은 XML 데이터가 사용하는 인코딩을 말하는 문자열이어야 해요. Expat 은 파이썬만큼 많은 인코딩을 지원하지 않으며 UTF-8, UTF-16, ISO-8859-1(Latin1), ASCII 를 지원해요.ParserCreate()로 만든 파서는 부모 파서가 없어 "루트" 파서라고 불러요. 비루트 파서는parser.ExternalEntityParserCreate로 만들어요.- Expat 은 namespace_separator 값을 제공하면 XML 네임스페이스 처리를 선택적으로 할 수 있어요. 값은 한 문자 문자열이어야 하며, 불법 길이면
ValueError가 발생해요. 네임스페이스 처리가 활성화되면 네임스페이스에 속하는 요소 타입 이름과 속성 이름이 확장돼요. - intern 은 주어지면 요소·속성 이름을 intern 하는 데 사용되는 딕셔너리여야 해요.
pyexpat가 사용하는Expat라이브러리의 제한 때문에 반환된xmlparser인스턴스는 단일 XML 문서만 파싱할 수 있어요. 문서마다ParserCreate를 호출해 고유한 파서 인스턴스를 제공하세요.
XMLParser 객체 (XMLParser Objects)
xmlparser 객체는 다음 메서드를 가져요.
- xmlparser.Parse(data[, isfinal]) — data 의 내용을 파싱해 적절한 핸들러 함수를 호출해요. data 는 bytes-like 객체나 문자열일 수 있어요. 문자열이면 XML 데이터의 인코딩 선언이 무시되고 이미 디코딩된 텍스트로 파싱돼요. isfinal 은 이 메서드의 마지막 호출에서 참이어야 해요.
- xmlparser.ParseFile(file) — 객체 file 에서 읽으며 XML 데이터를 파싱해요. file 은
read(nbytes)메서드만 제공하면 되며, 더 이상 데이터가 없을 때 빈 bytes 객체를 반환해야 해요. 텍스트 파일은 지원되지 않으며 이미 디코딩된 데이터는Parse()를 사용하세요. - xmlparser.SetBase(base) — 선언의 시스템 식별자에서 상대 URI 를 해석하는 데 사용할 베이스를 설정해요.
- xmlparser.GetBase() — 이전
SetBase()호출로 설정된 베이스를 포함하는 문자열을 반환하거나, 호출된 적이 없으면None을 반환해요. - xmlparser.GetInputContext() — 현재 이벤트를 생성한 입력 데이터를
bytes객체로 반환해요. 이벤트 핸들러가 활성 상태가 아닐 때 호출하면None. - xmlparser.ExternalEntityParserCreate(context[, encoding]) — 부모 파서의 내용에서 참조되는 외부 파싱 엔티티를 파싱하는 데 사용할 수 있는 "자식" 파서를 만들어요.
- xmlparser.SetParamEntityParsing(flag) — 매개변수 엔티티(외부 DTD 하위 집합 포함)의 파싱을 제어해요. 플래그 값은
XML_PARAM_ENTITY_PARSING_NEVER,XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE,XML_PARAM_ENTITY_PARSING_ALWAYS. - xmlparser.UseForeignDTD([flag]) — 참 값으로 호출하면 Expat 이 모든 인자에
None을 주고 외부 엔티티 핸들러를 호출해 대체 DTD 를 로드하도록 해요. - xmlparser.SetReparseDeferralEnabled(enabled) — Expat 2.6.0 의 "재파싱 연기(reparse deferral)" 보안 메커니즘을 제어해요.
False로 호출하면 현재 Expat 파서 인스턴스에 대해 재파싱 연기를 비활성화해요. 보안 영향이 있으므로 주의해 사용해야 해요.
오류 코드 (Error codes)
xml.parsers.expat.errors 모듈은 XML_ERROR_* 상수들을 제공해요. 예를 들어:
XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING— 파싱 시작 후 변경할 수 있는 동작 변경을 요청했을 때(UseForeignDTD()만 발생).XML_ERROR_UNBOUND_PREFIX— 네임스페이스 처리가 활성화됐을 때 선언되지 않은 접두사를 발견.XML_ERROR_AMPLIFICATION_LIMIT_BREACH— 입력 증폭 인자(DTD 및 엔티티에서) 한도를 위반.XML_ERROR_SUSPENDED— 일시 중단된 파서에 허용되지 않는 연산을 요청.
errors.codes 딕셔너리로 오류 코드를 매핑할 수 있어요.