Expat C API

The xml.parsers.expat module exposes selected Expat functions through its expat_CAPI capsule. This allows extension modules to use the same Expat library as Python. The interface is declared in pyexpat.h, which is not included by Python.h and must be included after Expat's expat.h header.

To use the C API, add the following code to the extension module initialization function and store the pointer to the C API in the module state:

struct PyExpat_CAPI *capi = NULL;
capi = (struct PyExpat_CAPI *)PyCapsule_Import(PyExpat_CAPSULE_NAME, 0);
if (capi == NULL) {
    goto error;
}
if (!(
     strcmp(capi->magic, PyExpat_CAPI_MAGIC) == 0
     && (size_t)capi->size >= sizeof(struct PyExpat_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

Major, minor, and micro version numbers of the Expat library used by xml.parsers.expat, set to XML_MAJOR_VERSION, XML_MINOR_VERSION, and XML_MICRO_VERSION respectively.

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

اشاره‌گر به XML_SetUnknownEncodingHandler. هندلر ممکن است هنگام خطا یک استثنای پایتون تنظیم کند. فراخواننده باید پس از تجزیه، وجود استثنای پایتون را بررسی کند.

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

هندلر کدگذاری نامشخص پایتون برای Expat، که با XML_SetUnknownEncodingHandler استفاده می‌شود. این هندلر از رجیستری کُدک پایتون برای پر کردن info استفاده می‌کند. آرگومان encodingHandlerData استفاده نمی‌شود. فراخوانی این هندلر نیازمند یک وضعیت نخ متصل است.

اضافه شده در نسخه‌ی 3.3.

اشاره‌گرها به توابع متناظر Expat، یا NULL اگر در نسخه‌ی Expat مورد استفاده‌ی xml.parsers.expat موجود نباشند، در زیر فهرست شده‌اند.

Member names omit the XML_ prefix; for example, SetHashSalt exposes Expat's XML_SetHashSalt function. See the Expat API reference for their behavior.

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)

اضافه شده در نسخه‌ی 3.2.

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

اضافه شده در نسخه‌ی 3.3.

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

Might be NULL for Expat versions prior to 2.1.0.

اضافه شده در نسخه‌ی 3.4.

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

Might be NULL for Expat versions prior to 2.6.0.

اضافه شده در نسخه‌ی 3.8.

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

Might be NULL for Expat versions prior to 2.7.2.

اضافه شده در نسخه‌ی 3.10.

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

Might be NULL for Expat versions prior to 2.7.2.

اضافه شده در نسخه‌ی 3.10.

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

Might be NULL for Expat versions prior to 2.4.0.

اضافه شده در نسخه‌ی 3.10.

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

Might be NULL for Expat versions prior to 2.4.0.

اضافه شده در نسخه‌ی 3.10.

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

Might be NULL for Expat versions prior to 2.8.0.

اضافه شده در نسخه‌ی 3.16.