Python

Expat C API

xml.parsers.expat 모듈은 expat_CAPI 캡슐을 통해 선택된 Expat 함수들을 노출합니다. 이를 통해 확장 모듈은 Python과 동일한 Expat 라이브러리를 사용할 수 있습니다. 인터페이스는 pyexpat.h`에 선언되어 있으며, 이는 :file:`Python.h`에 포함되어 있지 않으므로 Expat의 :file:`expat.h 헤더 뒤에 포함되어야 합니다.

C API를 사용하려면 다음 코드를 확장 모듈 초기화 함수에 추가하고 C API 포인터를 모듈 상태에 저장하십시오:

struct PyExpat_CAPI *capi = NULL;
capi = (struct PyExmat_CAPI *)PyCapsule_Import(PyExpat_CAPI_NAME, 0);
if (capi == NULL) {
    goto error;
}
if (!(
     strcmp(capi->magic, PyExpat_CAPI_MAGIC) == 0
     && (size_t)capi->size >= sizeof(struct PyExmat_CAPI)
)) {
    PyErr_SetString(PyExc_ImportError, "pyexpat version is incompatible");
    goto error;
}
PyExpat_CAPSULE_NAME

Expat C API를 포함하는 캡슐의 이름은 "pyexpat.expat_CAPI" 입니다. 이를 PyCapsule_Import() 에 전달하여 PyExpat_CAPI 에 대한 포인터를 얻을 수 있습니다.

PyExpat_CAPI_MAGIC

The string identifying the layout of PyExpat_CAPI. Before using the function pointers in the structure, check that its magic member compares equal to this string using strcmp() and its size member is at least sizeof(struct PyExpat_CAPI).

struct PyExpat_CAPI

xml.parsers.expat 에 의해 내보낸 함수 포인터 테이블입니다. 캡슐이 이 구조를 소유하므로 읽기 전용으로 취급하고 해제하지 마십시오. 테이블을 사용하는 동안 캡슐에 대한 강력한 참조를 유지하십시오.

함수 포인터를 사용하기 전에 PyExpat_CAPI_MAGIC 에 설명된 호환성 필드를 확인하십시오.

char *magic

PyExpat_CAPI_MAGIC 으로 설정된 인터페이스 식별자입니다.

int size

구조체의 크기(바이트 단위)이며, 캡슐을 생성한 xml.parsers.expat 모듈에 의해 sizeof(struct PyExpat_CAPI) 로 설정됩니다.

int MAJOR_VERSION
int MINOR_VERSION
int MICRO_VERSION

xml.parsers.expat 에서 사용하는 Expat 라이브러리의 Major, minor, micro 버전 번호이며, 각각 XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION 으로 설정됩니다.

void (*SetUnknownEncodingHandler)(XML_Parser parser, XML_UnknownEncodingHandler handler, void *encodingHandlerData)

XML_SetUnknownEncodingHandler 에 대한 포인터입니다.

int (*DefaultUnknownEncodingHandler)(void *encodingHandlerData, const XML_Char *name, XML_Encoding *info)

XML_SetUnknownEncodingHandler 와 함께 사용되는 Expat용 파이썬 미지정 인코딩 처리기입니다. 이 핸들러는 파이썬의 코덱 레지스트리를 사용하여 info 를 채웁니다. encodingHandlerData 인수는 사용되지 않습니다. 이 핸들러를 호출하려면 attached thread state 가 필요합니다.

Added in version 3.3.

해당 Expat 함수에 대한 포인터가 아래에 나열되어 있으며, xml.parsers.expat 에서 사용하는 Expat 버전에서 사용할 수 없는 경우 NULL 이 표시됩니다.

멤버 이름은 XML_ 접두사를 생략합니다. 예를 들어, SetHashSalt 는 Expat의 XML_SetHashSalt 함수를 노출합니다. 자세한 동작 방식은 Expat API reference 를 참조하십시오.

const XML_LChar *(*ErrorString)(enum XML_Error code)
enum XML_Error (*GetErrorCode)(XML_Parser parser)
XML_Size (*GetErrorColumnNumber)(XML_Parser parser)
XML_Size (*GetErrorLineNumber)(XML_Parser parser)
enum XML_Status (*Parse)(XML_Parser parser, const char *s, int len, int isFinal)
XML_Parser (*ParserCreate_MM)(const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *namespaceSeparator)
void (*ParserFree)(XML_Parser parser)
void (*SetCharacterDataHandler)(XML_Parser parser, XML_CharacterDataHandler handler)
void (*SetCommentHandler)(XML_Parser parser, XML_CommentHandler handler)
void (*SetDefaultHandlerExpand)(XML_Parser parser, XML_DefaultHandler handler)
void (*SetElementHandler)(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
void (*SetNamespaceDeclHandler)(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end)
void (*SetProcessingInstructionHandler)(XML_Parser parser, XML_ProcessingInstructionHandler handler)
void (*SetUserData)(XML_Parser parser, void *userData)
void (*SetStartDoctypeDeclHandler)(XML_Parser parser, XML_StartDoctypeDeclHandler start)

Added in version 3.2.

enum XML_Status (*SetEncoding)(XML_Parser parser, const XML_Char *encoding)

Added in version 3.3.

int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt)

Expat 버전 2.1.0 이전 버전에서는 NULL 일 수 있습니다.

Added in version 3.4.

XML_Bool (*SetReparseDeferralEnabled)(XML_Parser parser, XML_Bool enabled)

Expat 버전 2.6.0 이전 버전에서는 NULL 일 수 있습니다.

Added in version 3.8.

XML_Bool (*SetAllocTrackerActivationThreshold)(XML_Parser parser, unsigned long long activationThresholdBytes)

Expat 버전 2.7.2 이전 버전에서는 NULL 일 수 있습니다.

Added in version 3.10.

XML_Bool (*SetAllocTrackerMaximumAmplification)(XML_Parser parser, float maxAmplificationFactor)

Expat 버전 2.7.2 이전 버전에서는 NULL 일 수 있습니다.

Added in version 3.10.

XML_Bool (*SetBillionLaughsAttackProtectionActivationThreshold)(XML_Parser parser, unsigned long long activationThresholdBytes)

Expat 버전 2.4.0 이전 버전에서는 NULL 일 수 있습니다.

Added in version 3.10.

XML_Bool (*SetBillionLaughsAttackProtectionMaximumAmplification)(XML_Parser parser, float maxAmplificationFactor)

Expat 버전 2.4.0 이전 버전에서는 NULL 일 수 있습니다.

Added in version 3.10.

XML_Bool (*SetHashSalt16Bytes)(XML_Parser parser, const uint8_t entropy[16])

Expat 버전 2.8.0 이전 버전에서는 NULL 일 수 있습니다.

Added in version 3.16.