xml.sax.xmlreader --- رابط برای پارسرهای XML¶
کد منبع: Lib/xml/sax/xmlreader.py
پارسرهای SAX رابط XMLReader را پیادهسازی میکنند. آنها در یک ماژول پایتون پیادهسازی شدهاند که باید تابع create_parser() را ارائه کند. این تابع توسط xml.sax.make_parser() بدون آرگومان فراخوانی میشود تا یک شیء پارسر جدید ایجاد شود.
- class xml.sax.xmlreader.XMLReader¶
کلاس پایهای که پارسرهای SAX میتوانند آن را به ارث ببرند.
- class xml.sax.xmlreader.IncrementalParser¶
در برخی موارد، مطلوب است که یک منبع ورودی بهصورت یکجا تجزیه نشود، بلکه تکههایی از سند بهمحض در دسترس قرار گرفتن، تغذیه شوند. توجه داشته باشید که خواننده معمولاً کل پرونده را نمیخواند، بلکه آن را نیز بهصورت تکهتکه میخواند؛ با این حال
parse()تا زمانی که کل سند پردازش نشود، بازگشت نخواهد کرد. بنابراین اگر رفتار مسدودکنندهیparse()مطلوب نیست، باید از این رابطها استفاده شود.هنگامی که پارسر نمونهسازی میشود، بلافاصله آمادهی آغاز پذیرش داده از متد feed است. پس از پایان یافتن تجزیه با فراخوانی close، باید متد reset فراخوانی شود تا پارسر آمادهی پذیرش دادههای جدید، چه از feed و چه با استفاده از متد parse، شود.
توجه داشته باشید که این متدها نباید در حین تجزیه فراخوانی شوند، یعنی پس از فراخوانی parse و پیش از بازگشت آن.
بهطور پیشفرض، این کلاس همچنین برای سهولت کار نویسندگان راهانداز SAX 2.0، متد parse رابط XMLReader را با استفاده از متدهای feed، close و reset رابط IncrementalParser پیادهسازی میکند.
- class xml.sax.xmlreader.Locator¶
رابطی برای مرتبط کردن یک رویداد SAX با موقعیت سند. یک شیء مکانیاب (locator) فقط در حین فراخوانی متدهای DocumentHandler نتایج معتبر برمیگرداند؛ در هر زمان دیگری، نتایج غیرقابل پیشبینی خواهند بود. اگر اطلاعات در دسترس نباشد، متدها ممکن است
Noneرا برگردانند.
- class xml.sax.xmlreader.InputSource(system_id=None)¶
کپسولهسازی اطلاعات مورد نیاز
XMLReaderبرای خواندن موجودیتها.این کلاس ممکن است شامل اطلاعاتی درباره شناسهی عمومی، شناسهی سیستمی، جریان بایت (احتمالاً همراه با اطلاعات کدگذاری نویسه) و/یا جریان نویسهی یک موجودیت باشد.
برنامههای کاربردی اشیایی از این کلاس را برای استفاده در متد
XMLReader.parse()و برای بازگشت از EntityResolver.resolveEntity ایجاد میکنند.یک
InputSourceبه برنامه تعلق دارد؛XMLReaderاجازه ندارد اشیایInputSourceارسالشده از برنامه به آن را تغییر دهد، اگرچه میتواند کپیهایی بسازد و آنها را تغییر دهد.
- class xml.sax.xmlreader.AttributesImpl(attrs)¶
این یک پیادهسازی از رابط
Attributesاست (به بخش رابط Attributes مراجعه کنید). این یک شیء دیکشنریمانند است که ویژگیهای المان را در فراخوانیstartElement()نشان میدهد. علاوه بر مفیدترین عملیات دیکشنری، از تعدادی متد دیگر نیز پشتیبانی میکند، همانطور که در رابط توصیف شده است. نمونههای این کلاس باید توسط خوانندهها نمونهسازی شوند؛ attrs باید یک شیء دیکشنریمانند باشد که شامل نگاشتی از نامهای ویژگی به مقادیر ویژگی است.
- class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames)¶
گونهای از
AttributesImplکه از فضای نام آگاه است و بهstartElementNS()پاس داده خواهد شد. این کلاس ازAttributesImplمشتق شده است، اما نام ویژگیها را بهصورت دوتاییهایی (two-tuples) از namespaceURI و localname میشناسد. علاوه بر این، تعدادی متد فراهم میکند که انتظار دریافت نامهای کامل را دارند، همانگونه که در سند اصلی ظاهر میشوند. این کلاس رابطAttributesNSرا پیادهسازی میکند (به بخش رابط AttributesNS مراجعه کنید).
اشیای XMLReader¶
رابط XMLReader از متدهای زیر پشتیبانی میکند:
- XMLReader.parse(source)¶
یک منبع ورودی را پردازش میکند و رویدادهای SAX تولید میکند. شیء source میتواند یک شناسه سیستم (رشتهای که منبع ورودی را شناسایی میکند — معمولاً یک نام پرونده یا URL)، یک شیء
pathlib.Pathیا path-like، یا یک شیءInputSourceباشد. هنگامی کهparse()بازمیگردد، ورودی بهطور کامل پردازش میشود و میتوان شیء پارسر را دور انداخت یا بازنشانی کرد.تغییر یافته در نسخهی 3.5: پشتیبانی از جریانهای نویسهای اضافه شد.
تغییر یافته در نسخهی 3.8: پشتیبانی از اشیاء شبهمسیر افزوده شد.
- XMLReader.getContentHandler()¶
ContentHandlerفعلی را برمیگرداند.
- XMLReader.setContentHandler(handler)¶
ContentHandlerجاری را تنظیم کنید. اگر هیچContentHandlerتنظیم نشده باشد، رویدادهای محتوا دور ریخته میشوند.
- XMLReader.getDTDHandler()¶
DTDHandlerجاری را برمیگرداند.
- XMLReader.setDTDHandler(handler)¶
DTDHandlerجاری را تنظیم میکند. اگر هیچDTDHandlerتنظیمنشده باشد، رویدادهای DTD نادیده گرفته میشوند.
- XMLReader.getEntityResolver()¶
EntityResolverجاری را برمیگرداند.
- XMLReader.setEntityResolver(handler)¶
EntityResolverفعلی را تنظیم کنید. اگر هیچEntityResolverتنظیم نشده باشد، تلاش برای حل یک موجودیت خارجی منجر به باز کردن شناسه سیستم آن موجودیت میشود و اگر در دسترس نباشد، شکست میخورد.
- XMLReader.getErrorHandler()¶
ErrorHandlerفعلی را برمیگرداند.
- XMLReader.setErrorHandler(handler)¶
هندلر خطای جاری را تنظیم کنید. اگر هیچ
ErrorHandlerتنظیم نشده باشد، خطاها بهصورت استثنا پرتاب میشوند و هشدارها چاپ میشوند.
- XMLReader.setLocale(locale)¶
به یک برنامه اجازه میدهد تنظیمات locale را برای خطاها و هشدارها تنظیم کند.
پارسرهای SAX ملزم نیستند بومیسازی را برای خطاها و هشدارها فراهم کنند؛ با این حال، اگر نتوانند از locale درخواستی پشتیبانی کنند، باید یک استثنای SAX را پرتاب کنند. برنامههای کاربردی میتوانند در میانهی یک تجزیه، درخواست تغییر locale کنند.
- XMLReader.getFeature(featurename)¶
تنظیم فعلی قابلیت featurename را برمیگرداند. اگر قابلیت شناسایی نشود، استثنای
SAXNotRecognizedExceptionپرتاب میشود. نام قابلیتهای شناختهشده در ماژولxml.sax.handlerفهرست شدهاند.
- XMLReader.setFeature(featurename, value)¶
featurename را روی value تنظیم کنید. اگر ویژگی شناسایی نشود،
SAXNotRecognizedExceptionپرتاب میشود. اگر ویژگی یا تنظیم آن توسط پارسر پشتیبانی نشود، SAXNotSupportedException پرتاب میشود.
- XMLReader.getProperty(propertyname)¶
تنظیم فعلی برای خصوصیت propertyname را برمیگرداند. اگر خصوصیت شناسایی نشود، یک
SAXNotRecognizedExceptionپرتاب میشود. نام خصوصیتهای شناختهشده در ماژولxml.sax.handlerفهرست شدهاند.
- XMLReader.setProperty(propertyname, value)¶
propertyname را روی value تنظیم کنید. اگر ویژگی شناخته نشود،
SAXNotRecognizedExceptionپرتاب میشود. اگر ویژگی یا تنظیم آن توسط پارسر پشتیبانی نشود، SAXNotSupportedException پرتاب میشود.
اشیای IncrementalParser¶
نمونههای IncrementalParser متدهای اضافی زیر را ارائه میدهند:
- IncrementalParser.feed(data)¶
تکهای از data را پردازش میکند.
- IncrementalParser.close()¶
پایان سند را در نظر بگیرید. این کار شرایط خوشفرمی را که تنها در انتها قابل بررسی هستند، بررسی میکند، هندلرها را فراخوانی میکند و ممکن است منابع اختصاصیافته در طول تجزیه را پاکسازی کند.
- IncrementalParser.prepareParser(source)¶
Prepare the parser for parsing source, an
InputSourceinstance. It is called byparse()before feeding the data. The parser implementation must override this method; the default implementation raisesNotImplementedError.
- IncrementalParser.reset()¶
این متد پس از فراخوانی close فراخوانی میشود تا پارسر بازنشانی شود و برای تجزیه اسناد جدید آماده شود. نتایج فراخوانی parse یا feed پس از close بدون فراخوانی reset تعریفنشده است.
اشیای Locator¶
نمونههای Locator این متدها را ارائه میدهند:
- Locator.getColumnNumber()¶
شماره ستونی را که رویداد جاری در آن آغاز میشود، برمیگرداند.
- Locator.getLineNumber()¶
شماره سطری را که رویداد فعلی در آن آغاز میشود، برمیگرداند.
- Locator.getPublicId()¶
شناسه عمومی رویداد جاری را برمیگرداند.
- Locator.getSystemId()¶
شناسه سیستمی رویداد جاری را برمیگرداند.
اشیاء InputSource¶
- InputSource.setPublicId(id)¶
شناسه عمومی این
InputSourceرا تنظیم میکند.
- InputSource.getPublicId()¶
شناسه عمومی این
InputSourceرا برمیگرداند.
- InputSource.setSystemId(id)¶
شناسه سیستم این
InputSourceرا تنظیم میکند.
- InputSource.getSystemId()¶
شناسه سیستمی این
InputSourceرا بازمیگرداند.
- InputSource.setEncoding(encoding)¶
کدگذاری نویسهای این
InputSourceرا تنظیم میکند.کدگذاری باید رشتهای قابلقبول برای اعلامیه کدگذاری XML باشد (به بخش ۴.۳.۳ از توصیهنامه XML مراجعه کنید).
ویژگی کدگذاری
InputSourceدر صورتی نادیده گرفته میشود کهInputSourceشامل یک جریان نویسهای نیز باشد.
- InputSource.getEncoding()¶
کدگذاری نویسهای این InputSource را دریافت کنید.
- InputSource.setByteStream(bytefile)¶
جریان بایت (یک binary file) را برای این منبع ورودی تنظیم کنید.
پارسر SAX در صورتی که یک جریان نویسه نیز مشخص شده باشد، این را نادیده میگیرد، اما ترجیحاً بهجای باز کردن اتصال URI توسط خودش، از یک جریان بایت استفاده میکند.
اگر برنامه کدگذاری نویسههای جریان بایت را بداند، باید آن را با متد setEncoding تنظیم کند.
- InputSource.getByteStream()¶
دریافت جریان بایت برای این منبع ورودی.
متد getEncoding کدگذاری نویسهای این جریان بایت را برمیگرداند، یا اگر ناشناخته باشد
Noneرا.
- InputSource.setCharacterStream(charfile)¶
جریان نویسهای (یک text file) را برای این منبع ورودی تنظیم کنید.
اگر یک جریان نویسهای مشخص شده باشد، پارسر SAX هر جریان بایتی را نادیده میگیرد و برای باز کردن اتصال URI به شناسه سیستم تلاش نمیکند.
- InputSource.getCharacterStream()¶
جریان نویسهای این منبع ورودی را دریافت کنید.
رابط Attributes¶
اشیای Attributes بخشی از پروتکل نگاشت را پیادهسازی میکنند، از جمله متدهای copy()، get()، __contains__()، items()، keys() و values(). متدهای زیر نیز ارائه شدهاند:
- Attributes.getLength()¶
تعداد ویژگیها را برمیگرداند.
- Attributes.getNames()¶
نام ویژگیها را برمیگرداند.
- Attributes.getType(name)¶
نوع ویژگی name را برمیگرداند، که معمولاً
'CDATA'است.
- Attributes.getValue(name)¶
مقدار ویژگی name را برمیگرداند.
رابط AttributesNS¶
این رابط، زیرنوعی از رابط Attributes است (بخش رابط Attributes را ببینید). همهی متدهایی که آن رابط پشتیبانی میکند، در اشیای AttributesNS نیز در دسترس هستند.
متدهای زیر نیز در دسترس هستند:
- AttributesNS.getValueByQName(name)¶
مقدار یک نام کامل را برمیگرداند.
- AttributesNS.getNameByQName(name)¶
جفت
(namespace, localname)را برای یک نام کامل برمیگرداند.
- AttributesNS.getQNameByName(name)¶
بازگرداندن نام کامل برای یک جفت
(namespace, localname).
- AttributesNS.getQNames()¶
نامهای کامل (qualified names) همه ویژگیها را بازمیگرداند.