xml.dom --- API مدل شیء سند¶
کد منبع: Lib/xml/dom/__init__.py
مدل شیء سند یا «DOM»، یک API میانزبانی از کنسرسیوم وب جهانگستر (W3C) برای دسترسی و اصلاح اسناد XML است. یک پیادهسازی DOM، سند XML را بهعنوان یک ساختار درختی ارائه میکند یا به کد کلاینت اجازه میدهد چنین ساختاری را از پایه بسازد. سپس از طریق مجموعهای از شیءها که رابطهای شناختهشده را فراهم میکنند، به این ساختار دسترسی میدهد.
DOM برای برنامههای دسترسی تصادفی بسیار مفید است. SAX تنها به شما اجازه میدهد در هر زمان نمایی از یک بخش از سند را داشته باشید. اگر به یک عنصر SAX نگاه میکنید، به عنصر دیگری دسترسی ندارید. اگر به یک گره متنی نگاه میکنید، به عنصر حاوی آن دسترسی ندارید. هنگامی که یک برنامه SAX مینویسید، باید موقعیت برنامهتان در سند را در جایی از کد خودتان پیگیری کنید. SAX این کار را برای شما انجام نمیدهد. همچنین، اگر نیاز داشته باشید در سند XML جلوتر را ببینید، شانسی ندارید.
برخی برنامهها بهسادگی در یک مدل رویدادمحور بدون دسترسی به یک درخت امکانپذیر نیستند. البته شما میتوانید خودتان نوعی درخت را در رویدادهای SAX بسازید، اما DOM به شما امکان میدهد از نوشتن آن کد اجتناب کنید. DOM یک نمایش درختی استاندارد برای دادههای XML است.
مدل شیء سند (DOM) توسط W3C بهصورت مرحلهای، یا به اصطلاح آنها در «سطوح»، تعریف میشود. نگاشت پایتون برای این API عمدتاً بر پایه توصیهنامه DOM سطح ۲ است.
برنامههای DOM معمولاً با تجزیهی مقداری XML به یک DOM آغاز میشوند. نحوهی انجام این کار بههیچوجه در سطح ۱ DOM پوشش داده نشده است و سطح ۲ فقط بهبودهای محدودی ارائه میدهد: یک کلاس شیء DOMImplementation وجود دارد که دسترسی به متدهای ایجاد Document را فراهم میکند، اما هیچ راهی برای دسترسی به یک خواننده/پارسر/سازندهی Document برای XML بهصورت مستقل از پیادهسازی وجود ندارد. همچنین هیچ راه خوشتعریفی برای دسترسی به این متدها بدون یک شیء Document موجود وجود ندارد. در پایتون، هر پیادهسازی DOM تابع getDOMImplementation() را ارائه خواهد داد. سطح ۳ DOM مشخصات Load/Store را اضافه میکند که رابطی برای خواننده تعریف میکند، اما این مورد هنوز در کتابخانه استاندارد پایتون در دسترس نیست.
هنگامی که یک شیء سند DOM داشته باشید، میتوانید از طریق ویژگیها و متدهای آن به بخشهای سند XML خود دسترسی داشته باشید. این ویژگیها در مشخصات DOM تعریف شدهاند؛ این بخش از راهنمای مرجع، تفسیر این مشخصات در پایتون را توضیح میدهد.
مشخصات ارائهشده توسط W3C، DOM API را برای Java، ECMAScript و OMG IDL تعریف میکند. نگاشت پایتون تعریفشده در اینجا تا حد زیادی بر نسخهی IDL این مشخصات مبتنی است، اما رعایت دقیق الزامی نیست (اگرچه پیادهسازیها آزادند از نگاشت دقیق IDL پشتیبانی کنند). برای بحث مفصل دربارهی الزامات نگاشت، بخش انطباق را ببینید.
همچنین ملاحظه نمائید
- مشخصات سطح ۲ مدل شیء سند (DOM)
توصیهنامهی W3C که API DOM پایتون بر آن مبتنی است.
- مشخصات سطح ۱ مدل شیء سند (DOM)
توصیهنامهی W3C برای DOM که توسط
xml.dom.minidomپشتیبانی میشود.- مشخصات نگاشت زبان پایتون
این، نگاشت از OMG IDL به پایتون را مشخص میکند.
محتوای ماژول¶
xml.dom شامل توابع زیر است:
- xml.dom.registerDOMImplementation(name, factory)¶
تابع factory را با نام name ثبت کنید. تابع کارخانه باید شیءای را برگرداند که رابط
DOMImplementationرا پیادهسازی میکند. تابع کارخانه میتواند هر بار همان شیء را برگرداند، یا برای هر فراخوانی یک شیء جدید را برگرداند، بسته به آنچه برای پیادهسازی خاص مناسب است (مثلاً اگر آن پیادهسازی از برخی سفارشیسازیها پشتیبانی کند).
- xml.dom.getDOMImplementation(name=None, features=())¶
یک پیادهسازی DOM مناسب برگردانید. name یا بهخوبی شناختهشده است، یا نام ماژول یک پیادهسازی DOM، یا
None. اگرNoneنباشد، ماژول متناظر را ایمپورت میکند و اگر ایمپورت موفقیتآمیز باشد، یک شیءDOMImplementationبرمیگرداند. اگر نامی داده نشده باشد، و اگر متغیر محیطیPYTHON_DOMتنظیم شده باشد، این متغیر برای یافتن پیادهسازی استفاده میشود. تنها نام بهخوبی شناختهشده در کتابخانه استاندارد'minidom'است، برایxml.dom.minidom.اگر نام داده نشده باشد، این تابع پیادهسازیهای موجود را بررسی میکند تا پیادهسازیای با مجموعه ویژگیهای مورد نیاز یابد. اگر هیچ پیادهسازیای یافت نشد، یک
ImportErrorپرتاب میکند. فهرست ویژگیها باید یک دنباله از جفتهای(feature, version)باشد که به متدhasFeature()روی شیءهای موجودDOMImplementationپاس داده میشوند.
همچنین برخی ثابتهای کاربردی نیز ارائه شدهاند:
- xml.dom.EMPTY_NAMESPACE¶
مقداری که برای نشان دادن اینکه هیچ فضای نامی با یک گره در DOM مرتبط نیست، استفاده میشود. این مقدار معمولاً به عنوان
namespaceURIیک گره یافت میشود، یا به عنوان پارامتر namespaceURI به یک متد مختص فضای نام استفاده میشود.
- xml.dom.XML_NAMESPACE¶
URI فضای نام مرتبط با پیشوند محفوظ
xml، همانطور که در Namespaces in XML (بخش ۴) تعریف شده است.
- xml.dom.XMLNS_NAMESPACE¶
URI فضای نام برای اعلانهای فضای نام، همانطور که در Document Object Model (DOM) Level 2 Core Specification (بخش ۱.۱.۸) تعریف شده است.
- xml.dom.XHTML_NAMESPACE¶
URI فضای نام XHTML، همانطور که در XHTML 1.0: The Extensible HyperText Markup Language (بخش 3.1.1) تعریف شده است.
علاوه بر این، xml.dom یک کلاس پایه Node و کلاسهای استثنای DOM را شامل میشود. کلاس Node ارائه شده توسط این ماژول هیچیک از متدها یا ویژگیهای تعریف شده در مشخصات DOM را پیادهسازی نمیکند؛ پیادهسازیهای واقعی DOM باید آنها را فراهم کنند. کلاس Node ارائه شده به عنوان بخشی از این ماژول، ثابتهای استفاده شده برای ویژگی nodeType روی شیءهای واقعی Node را فراهم میکند؛ این ثابتها در داخل کلاس قرار دارند نه در سطح ماژول، تا با مشخصات DOM سازگار باشند.
اشیاء در DOM¶
مستندات قطعی برای DOM، مشخصات DOM از W3C است.
نامهای مستند شده در این بخش رابطهای DOM هستند. با استثنای Node و کلاسهای استثنا، آنها توسط خود ماژول xml.dom ارائه نمیشوند، بلکه توسط پیادهسازیهای واقعی DOM، مانند xml.dom.minidom فراهم میشوند.
توجه داشته باشید که ویژگیهای DOM را میتوان بهجای رشتههای ساده، بهعنوان گرهها نیز دستکاری کرد. با این حال، نیاز به انجام این کار نسبتاً نادر است، بنابراین این کاربرد هنوز مستند نشده است.
رابط |
بخش |
هدف |
|---|---|---|
رابطی برای پیادهسازی زیربنایی. |
||
رابط پایه برای بیشتر شیءها در یک سند. |
||
رابطی برای دنبالهای از گرهها. |
||
اطلاعات مربوط به اعلانهای مورد نیاز برای پردازش یک سند. |
||
شیءای که نشاندهندهی یک سند کامل است. |
||
گرههای عنصر در سلسلهمراتب سند. |
||
گرههای مقدار صفت روی گرههای عنصر. |
||
بازنمایی کامنتها در سند منبع. |
||
گرههای حاوی محتوای متنی سند. |
||
بازنمایی دستورالعمل پردازش. |
بخش دیگری، استثناهای تعریفشده برای کار با DOM در پایتون را شرح میدهد.
اشیاء DOMImplementation¶
رابط DOMImplementation راهی را برای برنامهها فراهم میکند تا در دسترس بودن ویژگیهای خاصی را در DOM مورد استفادهشان تعیین کنند. سطح ۲ DOM همچنین توانایی ایجاد اشیای جدید Document و DocumentType را با استفاده از DOMImplementation افزود.
- DOMImplementation.hasFeature(feature, version)¶
اگر قابلیت مشخصشده با جفت رشتهی feature و version پیادهسازی شده باشد،
Trueبرگردانده میشود.
- DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)¶
یک شیء جدید
Document(ریشهی DOM) را برمیگرداند، بههمراه یک شیء فرزند از نوعElementکه دارای namespaceUri و qualifiedName دادهشده است. doctype باید یک شیءDocumentTypeباشد که باcreateDocumentType()ایجاد شده است، یاNoneباشد. در API DOM پایتون، دو آرگومان نخست نیز میتوانندNoneباشند تا نشان دهند که هیچ فرزندی از نوعElementقرار نیست ایجاد شود.
- DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)¶
یک شیء جدید
DocumentTypeبرمیگرداند که رشتههای qualifiedName، publicId و systemId دادهشده را دربر میگیرد و نشاندهنده اطلاعات موجود در اعلان نوع سند XML است.
اشیای Node¶
همهی کامپوننتهای یک سند XML، زیرکلاسهایی از Node هستند.
فقط گرههای از نوعهای زیر میتوانند فرزند داشته باشند، و فقط فرزندان از نوعهای فهرستشده:
Documentحداکثر یک
Element، حداکثر یکDocumentType،ProcessingInstructionوCommentDocumentFragmentوElementElement،Text،CDATASection،ProcessingInstructionوCommentAttr
گرههای از نوعهای دیگر نمیتوانند فرزند داشته باشند. درج فرزند از نوعی مجاز نیست، استثنای HierarchyRequestErr را پرتاب میکند.
- Node.nodeType¶
یک عدد صحیح که نوع گره را نشان میدهد. ثابتهای نمادین برای نوعها در شیء
Nodeقرار دارند. این یک ویژگی فقطخواندنی است.
- Node.ELEMENT_NODE¶
- Node.ATTRIBUTE_NODE¶
- Node.TEXT_NODE¶
- Node.CDATA_SECTION_NODE¶
- Node.ENTITY_REFERENCE_NODE¶
- Node.ENTITY_NODE¶
- Node.PROCESSING_INSTRUCTION_NODE¶
- Node.COMMENT_NODE¶
- Node.DOCUMENT_NODE¶
- Node.DOCUMENT_TYPE_NODE¶
- Node.DOCUMENT_FRAGMENT_NODE¶
- Node.NOTATION_NODE¶
ثابتهای عدد صحیح برای مقادیر ممکن ویژگی
nodeType.
- Node.parentNode¶
والد گره فعلی، یا
Noneبرای گره سند. مقدار همیشه یک شیءNodeیاNoneاست. برای گرههایElement، این، عنصر والد خواهد بود، بهجز عنصر ریشه، که در این صورت شیءDocumentخواهد بود. برای گرههایAttr، این همیشهNoneاست. این یک ویژگی فقطخواندنی است.
- Node.attributes¶
یک
NamedNodeMapاز اشیای صفت. تنها عناصر برای این ویژگی مقادیر واقعی دارند؛ سایر موارد برای این ویژگیNoneارائه میدهند. این یک ویژگی فقطخواندنی است.
- Node.previousSibling¶
گرهای که بلافاصله پیش از این گره و با همان والد قرار دارد. برای مثال، المانی که برچسب پایانی آن درست پیش از برچسب آغازین المان self قرار میگیرد. البته، اسناد XML تنها از المانها تشکیل نشدهاند، بنابراین همسطح قبلی (previous sibling) میتواند متن، کامنت یا چیز دیگری باشد. اگر این گره اولین فرزند والد باشد، این ویژگی
Noneخواهد بود. این یک ویژگی فقطخواندنی است.
- Node.nextSibling¶
گرهای که بلافاصله پس از این گره و با همان والد میآید. همچنین
previousSiblingرا ببینید. اگر این گره آخرین فرزند والد باشد، این ویژگیNoneخواهد بود. این ویژگی فقطخواندنی است.
- Node.childNodes¶
یک
NodeListاز فرزندان این گره. اگر گره فرزندی نداشته باشد، فهرست خالی است. این یک ویژگی فقطخواندنی است.
- Node.firstChild¶
اولین فرزند گره، در صورت وجود، یا
None. این یک ویژگی فقطخواندنی است.
- Node.lastChild¶
آخرین فرزند گره، در صورت وجود، یا
None. این یک ویژگی فقطخواندنی است.
- Node.localName¶
بخش از
tagNameکه پس از دونقطه میآید اگر وجود داشته باشد، در غیر این صورت کلtagName. مقدار یک رشته است.
- Node.prefix¶
بخش از
tagNameکه پیش از دونقطه میآید اگر وجود داشته باشد، در غیر این صورت رشته خالی. مقدار یک رشته است، یاNone.
- Node.namespaceURI¶
فضای نام مرتبط با نام عنصر. این مقدار یک رشته یا
Noneخواهد بود. این یک ویژگی فقطخواندنی است.
- Node.ownerDocument¶
شیء
Documentکه این گره به آن تعلق دارد، یاNoneبرای خودِ سند. این یک ویژگی فقطخواندنی است.
- Node.isSupported(feature, version)¶
برگردانید که آیا پیادهسازی DOM یک feature خاص را پشتیبانی میکند، همانطور که
DOMImplementation.hasFeature()میکند.
- Node.setUserData(key, data, handler)¶
data را با key در این گره مرتبط کنید و دادهی قبلی مرتبط با key را برگردانید، یا
None. اگر data برابرNoneباشد، ارتباط حذف میشود. هندلر زمانی فراخوانی میشود که گره کپی، وارد، تغییر نام یا حذف شود؛ اگر اعلان نیاز نباشدNoneرا پاس دهید.
- Node.getUserData(key)¶
دادهی مرتبط با key در این گره توسط
setUserData()را برگردانید، یاNone.
- Node.nodeName¶
نام این گره، بسته به نوع آن؛ جدول زیر را ببینید. شما همیشه میتوانید اطلاعاتی که اینجا به دست میآورید را از ویژگی دیگری مانند ویژگی
tagNameبرای المانها یا ویژگیnameبرای ویژگیها دریافت کنید. این یک ویژگی فقطخواندنی است.
- Node.nodeValue¶
مقدار این گره، بسته به نوع آن؛ جدول زیر را ببینید. مقدار یک رشته یا
Noneاست.
مقادیر nodeName و nodeValue برای هر نوع گره عبارتند از:
نوع گره |
nodeName |
nodeValue |
|---|---|---|
|
محتوا |
|
|
محتوا |
|
|
|
|
|
|
|
|
||
|
||
نام موجودیت |
|
|
نام نمادگذاری |
|
|
|
محتوا |
- Node.hasAttributes()¶
اگر گره دارای ویژگیای باشد،
Trueرا برمیگرداند.
- Node.hasChildNodes()¶
اگر گره دارای گرههای فرزند باشد،
Trueرا برمیگرداند.
- Node.isSameNode(other)¶
اگر other به همان گرهای اشاره کند که این گره به آن اشاره دارد،
Trueرا برمیگرداند. این موضوع بهویژه برای پیادهسازیهای DOM که از هر نوع معماری پراکسی (proxy architecture) استفاده میکنند، مفید است (زیرا بیش از یک شیء میتواند به یک گره اشاره کند).توجه
این مبتنی بر یک API پیشنهادی DOM سطح ۳ است که هنوز در مرحلهی «پیشنویس کاری» قرار دارد، اما به نظر میرسد این رابط خاص بدون مناقشه است. تغییرات از سوی W3C لزوماً این متد را در رابط DOM پایتون تحت تأثیر قرار نخواهد داد (اگرچه هر API جدید W3C برای این منظور نیز پشتیبانی خواهد شد).
- Node.appendChild(newChild)¶
یک گره فرزند جدید را در انتهای فهرست فرزندان به این گره اضافه میکند و newChild را برمیگرداند. اگر گره از قبل در درخت وجود داشته باشد، ابتدا حذف میشود.
- Node.insertBefore(newChild, refChild)¶
یک گرهی فرزند جدید را قبل از یک فرزند موجود درج کنید. باید refChild فرزند این گره باشد؛ در غیر این صورت،
NotFoundErrپرتاب میشود. newChild بازگردانده میشود. اگر refChild برابرNoneباشد، newChild را در پایان فهرست فرزندان درج میکند.
- Node.removeChild(oldChild)¶
یک گرهی فرزند را حذف کنید. oldChild باید فرزند این گره باشد؛ در غیر این صورت،
NotFoundErrپرتاب میشود. در صورت موفقیت، oldChild بازگردانده میشود. اگر oldChild بیشتر استفاده نشود، باید متدunlink()آن فراخوانی شود.
- Node.replaceChild(newChild, oldChild)¶
یک گرهی موجود را با یک گرهی جدید جایگزین کنید. باید oldChild فرزند این گره باشد؛ در غیر این صورت،
NotFoundErrپرتاب میشود.
- Node.normalize()¶
گرههای متنی مجاور را ادغام کنید تا تمام بخشهای متن بهعنوان نمونههای واحد
Textذخیره شوند. این کار پردازش متن از درخت DOM را برای بسیاری از کاربردها سادهتر میکند.
- Node.cloneNode(deep)¶
این گره را رونویسی کنید. تنظیم deep به معنای رونوشت تمام گرههای فرزند نیز است. این، گره رونوشتشده را بازمیگرداند.
اشیای NodeList¶
یک NodeList نمایانگر یک دنباله از گرههاست. این اشیاء در دو روش در توصیهی هستهی DOM استفاده میشوند: یک شیء Element یکی را به عنوان فهرست گرههای فرزند خود فراهم میکند، و متدهای getElementsByTagName() و getElementsByTagNameNS() کلاس Node اشیاء با این رابط را برای نمایش نتایج پرسوجو بازمیگردانند.
NodeList از Node ارثبری نمیکند.
توصیهنامهی DOM Level 2 یک متد و یک ویژگی برای این اشیاء تعریف میکند:
- NodeList.item(i)¶
آیتم i-ام را از دنباله بازگردانید، یا
Noneاگر i خارج از محدوده باشد. اندیسهای منفی پشتیبانی نمیشوند.
- NodeList.length¶
تعداد گرههای موجود در دنباله.
علاوه بر این، رابط DOM پایتون نیاز دارد که پشتیبانی بیشتری ارائه شود تا امکان استفاده از اشیاء NodeList بهعنوان دنبالههای پایتون فراهم شود. تمام پیادهسازیهای NodeList باید شامل پشتیبانی از __len__() و __getitem__() باشند؛ این امر امکان پیمایش روی NodeList در دستورات for و پشتیبانی مناسب از تابع توکار len() را فراهم میکند.
اگر یک پیادهسازی DOM از تغییر سند پشتیبانی کند، پیادهسازی NodeList نیز باید از متدهای __setitem__() و __delitem__() پشتیبانی کند.
اشیای DocumentType¶
اطلاعاتی درباره نمادگذاریها و موجودیتهای اعلامشده توسط یک سند (شامل زیرمجموعهی خارجی اگر پارسر از آن استفاده کند و بتواند اطلاعات را فراهم کند) از یک شیء DocumentType در دسترس است. DocumentType یک سند از ویژگی doctype شیء Document در دسترس است؛ اگر اعلان DOCTYPE برای سند وجود نداشته باشد، ویژگی doctype سند به جای یک نمونه از این رابط، برابر None تنظیم خواهد شد.
DocumentType یک نوع تخصصی از Node است و ویژگیهای زیر را اضافه میکند:
- DocumentType.publicId¶
شناسهی عمومی برای زیرمجموعهی خارجی تعریف نوع سند، یا
Noneاگر اعلانDOCTYPEآن را مشخص نکند.
- DocumentType.systemId¶
شناسهی سیستمی، یک URI، برای زیرمجموعهی خارجی تعریف نوع سند، یا
Noneاگر اعلانDOCTYPEآن را مشخص نکند.
- DocumentType.internalSubset¶
رشتهای که زیرمجموعهی داخلی کامل سند را ارائه میدهد. این شامل کروشههایی که زیرمجموعه را دربرمیگیرند، نمیشود. اگر سند زیرمجموعهی داخلی نداشته باشد، این مقدار باید
Noneباشد.
- DocumentType.name¶
نام عنصر ریشه، همانگونه که در اعلامیه
DOCTYPEآمده است، در صورت وجود.
- DocumentType.entities¶
این یک
NamedNodeMapاز نودهایEntityاست که تعاریف موجودیتهای خارجی را میدهند. برای نامهای موجودیت که بیش از یک بار تعریف شدهاند، فقط اولین تعریف ارائه میشود (سایر موارد طبق توصیه XML نادیده گرفته میشوند). این ممکن استNoneباشد اگر اطلاعات توسط پارسر ارائه نشده باشد، یا اگر هیچ موجودیتی تعریف نشده باشد.
- DocumentType.notations¶
این یک
NamedNodeMapاز نودهایNotationاست که تعاریف نمادگذاریها را میدهند. برای نامهای نمادگذاری که بیش از یک بار تعریف شدهاند، فقط اولین تعریف ارائه میشود (سایر موارد طبق توصیه XML نادیده گرفته میشوند). این ممکن استNoneباشد اگر اطلاعات توسط پارسر ارائه نشده باشد، یا اگر هیچ نمادگذاریی تعریف نشده باشد.
اشیای سند¶
یک Document نشاندهندهی یک سند XML کامل است، شامل عناصر تشکیلدهندهی آن، ویژگیها، دستورالعملهای پردازشی، کامنتها و غیره. به خاطر داشته باشید که این کلاس خصوصیات را از Node به ارث میبرد.
- Document.documentElement¶
یگانه عنصر ریشهی سند.
- Document.doctype¶
نود
DocumentTypeسند، یاNone. این یک ویژگی فقطخواندنی است.
- Document.implementation¶
شیء
DOMImplementationکه این سند را ایجاد کرده است. این یک ویژگی فقطخواندنی است.
- Document.strictErrorChecking¶
آیا بررسی خطا اعمال میشود.
- Document.documentURI¶
موقعیت سند، یا
Noneدر صورت ناشناخته بودن.
- Document.createDocumentFragment()¶
ایجاد و برگرداندن یک نود
DocumentFragmentخالی.
- Document.createCDATASection(data)¶
ایجاد و برگرداندن یک نود
CDATASectionحاوی data.
- Document.importNode(importedNode, deep)¶
یک کپی از importedNode که متعلق به این سند است برگردانید. نود اصلی از سند خود حذف نمیشود. اگر deep صحیح باشد، نودهای فرزند نود نیز کپی میشوند.
- Document.createElement(tagName)¶
ایجاد و برگرداندن یک نود المان جدید. المان هنگام ایجاد در سند درج نمیشود. شما باید به صراحت آن را با یکی از متدهای دیگر مانند
insertBefore()یاappendChild()درج کنید.
- Document.createElementNS(namespaceURI, tagName)¶
یک المان جدید با فضای نام بسازید و برگردانید. tagName میتواند پیشوند داشته باشد. المان هنگام ایجاد در سند درج نمیشود. شما باید به صراحت آن را با یکی از متدهای دیگر مانند
insertBefore()یاappendChild()درج کنید.
- Document.createTextNode(data)¶
یک گره متنی حاوی دادهای که بهعنوان پارامتر داده شده است را ایجاد میکند و برمیگرداند. مانند سایر متدهای ایجاد، این متد گره را در درخت درج نمیکند.
- Document.createComment(data)¶
یک گره کامنت حاوی دادهای که بهعنوان پارامتر ارسال میشود ایجاد میکند و آن را برمیگرداند. همانند سایر متدهای ایجاد، این متد گره را در درخت درج نمیکند.
- Document.createProcessingInstruction(target, data)¶
یک گره دستور پردازش حاوی target و data که بهعنوان پارامتر ارسال شدهاند ایجاد میکند و بازمیگرداند. مانند سایر متدهای ایجاد، این متد گره را در درخت درج نمیکند.
- Document.createAttribute(name)¶
یک گره ویژگی بسازید و برگردانید. این متد گره ویژگی را با هیچ المان خاصی مرتبط نمیکند. شما باید از
setAttributeNode()روی شیءElementمناسب استفاده کنید تا از نمونه ویژگی تازه ساختهشده بهرهمند شوید.
- Document.createAttributeNS(namespaceURI, qualifiedName)¶
یک گره ویژگی با فضای نام بسازید و برگردانید. tagName میتواند پیشوند داشته باشد. این متد گره ویژگی را با هیچ المان خاصی مرتبط نمیکند. شما باید از
setAttributeNode()روی شیءElementمناسب استفاده کنید تا از نمونه ویژگی تازه ساختهشده بهرهمند شوید.
- Document.getElementById(id)¶
المانی که دارای شناسه داده شده است را برگردانید، یا
None. تنها ویژگیهایی که در DTD یا توسطElement.setIdAttribute()به عنوان نوع ID اعلام شدهاند جستجو میشوند.
- Document.getElementsByTagName(tagName)¶
جستجو برای همهی نوادگان (فرزندان مستقیم، فرزندان فرزندان و غیره) با نام نوع عنصر معین.
- Document.getElementsByTagNameNS(namespaceURI, localName)¶
جستوجوی همهی نوادگان (فرزندان مستقیم، فرزندان فرزندان و غیره) با یک URI فضای نام و نام محلی (localname) معین. نام محلی (localname) بخشی از فضای نام است که پس از پیشوند قرار دارد.
- Document.renameNode(n, namespaceURI, name)¶
نام گره المان یا ویژگی n را تغییر دهید و آن را برگردانید. namespaceURI URI فضای نام جدید است، یا
EMPTY_NAMESPACEاگر گره متعلق به فضای نام نباشد. name نام کامل جدید است.WrongDocumentErrرا اگر n توسط سند دیگری ساخته شده باشد، وNotSupportedErrرا اگر نه المان باشد نه ویژگی، پرتاب کنید.
اشیاء عنصر¶
Element زیرکلاسی از Node است، بنابراین تمام ویژگیهای آن کلاس را به ارث میبرد.
- Element.tagName¶
نام نوع عنصر. در سندی که از فضای نام استفاده میکند، ممکن است حاوی دونقطه باشد. مقدار آن یک رشته است.
- Element.setIdAttribute(name)¶
اعلام کنید که ویژگی name از نوع ID است، تا المان توسط
Document.getElementById()یافت شود.NotFoundErrرا اگر المان چنین ویژگیای نداشته باشد پرتاب کنید.
- Element.setIdAttributeNS(namespaceURI, localName)¶
مشابه
setIdAttribute()، اما برای ویژگی مشخص شده با URI فضای نام و نام محلی.
- Element.setIdAttributeNode(idAttr)¶
مشابه
setIdAttribute()، اما برای یک گره ویژگی که قبلاً بازیابی شده است.
- Element.hasAttribute(name)¶
اگر عنصر دارای ویژگیای به نام name باشد،
Trueرا بازمیگرداند.
- Element.hasAttributeNS(namespaceURI, localName)¶
اگر عنصر دارای صفتی باشد که با namespaceURI و localName نامگذاری شده است،
Trueبرمیگرداند.
- Element.getAttribute(name)¶
مقدار ویژگی با نام name را بهصورت یک رشته برمیگرداند. اگر چنین ویژگیای وجود نداشته باشد، یک رشته خالی برگردانده میشود، گویی که ویژگی مقداری ندارد.
- Element.getAttributeNS(namespaceURI, localName)¶
مقدار ویژگی با نام تعیینشده توسط namespaceURI و localName را بهصورت یک رشته برمیگرداند. اگر چنین ویژگیای وجود نداشته باشد، یک رشته خالی برگردانده میشود، گویی که ویژگی مقداری ندارد.
- Element.getAttributeNodeNS(namespaceURI, localName)¶
مقدار یک ویژگی را با توجه به namespaceURI و localName بهصورت یک گره برمیگرداند.
- Element.removeAttribute(name)¶
یک ویژگی را با نام حذف کنید.
- Element.removeAttributeNode(oldAttr)¶
در صورت وجود، oldAttr را از فهرست ویژگیها حذف و برمیگرداند. اگر oldAttr وجود نداشته باشد،
NotFoundErrپرتاب میشود.
- Element.removeAttributeNS(namespaceURI, localName)¶
یک ویژگی را با نام حذف کنید. توجه کنید که از localName استفاده میکند، نه qname.
- Element.setAttribute(name, value)¶
تنظیم مقدار یک ویژگی از یک رشته.
- Element.setAttributeNode(newAttr)¶
یک نود ویژگی جدید به المان اضافه کنید، در صورت لزوم یک ویژگی موجود را جایگزین کنید اگر ویژگی
nameمطابقت داشته باشد. اگر جایگزینی رخ دهد، نود ویژگی قدیمی بازگردانده میشود. اگر newAttr از قبل در حال استفاده باشد،InuseAttributeErrصادر میشود.
- Element.setAttributeNodeNS(newAttr)¶
یک نود ویژگی جدید به المان اضافه کنید، در صورت لزوم یک ویژگی موجود را جایگزین کنید اگر ویژگیهای
namespaceURIوlocalNameمطابقت داشته باشند. اگر جایگزینی رخ دهد، نود ویژگی قدیمی بازگردانده میشود. اگر newAttr از قبل در حال استفاده باشد،InuseAttributeErrصادر میشود.
- Element.setAttributeNS(namespaceURI, qname, value)¶
مقدار یک ویژگی را از یک رشته، با داشتن namespaceURI و qname تنظیم کنید. توجه داشته باشید که qname کل نام ویژگی است. این مورد با مورد بالا متفاوت است.
اشیای Attr¶
Attr از Node ارث میبرد، بنابراین تمام ویژگیهای آن را به ارث میبرد.
نودهای ویژگی بخشی از درخت سند نیستند. آنها در نگاشت attributes یک المان قرار دارند، نه در فرزندان آن، و parentNode، previousSibling و nextSibling آنها همیشه None هستند.
- Attr.name¶
نام ویژگی. در سندی که از فضای نام استفاده میکند، ممکن است شامل دونقطه باشد.
- Attr.localName¶
بخشی از نام که پس از دونقطه میآید، اگر دونقطهای وجود داشته باشد، در غیر این صورت کل نام. این یک ویژگی فقطخواندنی است.
- Attr.prefix¶
بخشی از نام که پیش از دونقطه قرار دارد، در صورت وجود دونقطه، و در غیر این صورت رشته خالی.
- Attr.isId¶
آیا این ویژگی از نوع ID است، یا به دلیل اینکه در DTD به این صورت اعلام شده است یا به دلیل استفاده از
Element.setIdAttribute(). این یک ویژگی فقطخواندنی است.
- Attr.ownerElement¶
نود
Elementکه این ویژگی متعلق به آن است، یاNoneاگر استفاده نشده باشد. این یک ویژگی فقطخواندنی است.
- Attr.specified¶
آیا مقدار ویژگی به صراحت در سند تنظیم شده است، برخلاف پیشفرض بودن از DTD. این یک ویژگی فقطخواندنی است.
اشیای NamedNodeMap¶
NamedNodeMap از Node ارث نمیبرد.
- NamedNodeMap.length¶
طول فهرست ویژگیها.
- NamedNodeMap.item(index)¶
یک ویژگی با یک اندیس خاص را برگردانید. ترتیبی که ویژگیها در آن دریافت میشوند دلخواه است اما برای عمر یک DOM ثابت خواهد بود. هر آیتم یک نود ویژگی است. مقدار آن را با ویژگی
valueبدست آورید.
- NamedNodeMap.getNamedItem(name)¶
نودی را که
nameداده شده را دارد برگردانید، یاNoneاگر چنین نودی وجود نداشته باشد.
- NamedNodeMap.getNamedItemNS(namespaceURI, localName)¶
نودِ با فضای نام و نام محلی دادهشده را برگردانید، یا
Noneاگر چنین نودی وجود نداشته باشد.
- NamedNodeMap.setNamedItem(node)¶
node را به نگاشت اضافه کنید، با استفاده از
nameآن به عنوان کلید. نودی که جایگزین میشود را برگردانید، یاNoneاگر نودی جایگزین نشده باشد.
- NamedNodeMap.setNamedItemNS(node)¶
node را به نگاشت اضافه کنید، با استفاده از فضای نام و نام محلی آن به عنوان کلید. نودی که جایگزین میشود را برگردانید، یا
Noneاگر نودی جایگزین نشده باشد.
- NamedNodeMap.removeNamedItem(name)¶
نود با
nameدادهشده را حذف و برگردانید. اگر چنین نودی وجود نداشته باشد،NotFoundErrرا پرتاب کنید.
- NamedNodeMap.removeNamedItemNS(namespaceURI, localName)¶
نود با فضای نام و نام محلی دادهشده را حذف و برگردانید. اگر چنین نودی وجود نداشته باشد،
NotFoundErrرا پرتاب کنید.
شما همچنین میتوانید از خانوادهی متدهای استاندارد getAttribute*() روی شیءهای Element استفاده کنید.
شیءهای DocumentFragment¶
DocumentFragment یک ظرف سبکوزن از نودها است. این یک زیرکلاس از Node است. وقتی در درخت سند وارد میشود، فرزندان آن به جای خود وارد میشوند، و خالی میشود.
شیءهای CharacterData¶
CharacterData دادههای شبیه متن در سند XML را نشان میدهد. این یک زیرکلاس از Node است، و کلاس پایهی Text، CDATASection و Comment است. چنین نودها نمیتوانند نودهای فرزند داشته باشند.
- CharacterData.data¶
محتوای گره به صورت یک رشته.
اشیای Text و CDATASection¶
رابط Text متن در سند XML را نشان میدهد. اگر پارسر و پیادهسازی DOM از گسترش XMLِ DOM پشتیبانی کنند، بخشهای متنی که در بخشهای نشانهگذاریشده CDATA محصور شدهاند در شیءهای CDATASection ذخیره میشوند. این دو رابط یکسان هستند، اما مقادیر متفاوتی برای ویژگی nodeType فراهم میکنند.
Text رابط CharacterData را گسترش میدهد، و CDATASection Text را گسترش میدهد.
- Text.data¶
محتوای گره متنی بهعنوان یک رشته.
- Text.wholeText¶
متنِ تمام نودهای
Textبهصورت منطقی مجاور به این نود، در ترتیبِ سند الحاق شدهاند. این یک ویژگی فقطخواندنی است.
- Text.replaceWholeText(content)¶
متنِ تمام نودهای
Textبهصورت منطقی مجاور به این نود را با content جایگزین کنید، و نودهای دیگر را حذف کنید. این نود را برگردانید، یاNoneاگر content خالی باشد.
- Text.splitText(offset)¶
این نود را در offset به دو نود تقسیم کنید، با نگهداشتن بخش اول در این نود و برگرداندن یک نود همسایه جدید با باقیمانده.
توجه
استفاده از یک گره CDATASection نشان نمیدهد که آن گره یک بخش نمادگذاریشدهی CDATA کامل را نمایندگی میکند، بلکه تنها نشان میدهد که محتوای گره بخشی از یک بخش CDATA بوده است. یک بخش CDATA ممکن است توسط بیش از یک گره در درخت سند نمایندگی شود. هیچ راهی برای تعیین اینکه آیا دو گره CDATASection مجاور، بخشهای نمادگذاریشدهی CDATA متفاوتی را نمایندگی میکنند یا خیر، وجود ندارد.
اشیای ProcessingInstruction¶
نشاندهندهی یک دستور پردازشی (processing instruction) در سند XML است؛ این مورد از رابط Node ارثبری میکند و نمیتواند دارای گرههای فرزند باشد.
- ProcessingInstruction.target¶
محتوای دستورالعمل پردازشی تا نخستین نویسه فضای سفید. این یک ویژگی فقطخواندنی است.
- ProcessingInstruction.data¶
محتوای دستورالعمل پردازش پس از نخستین نویسه فضای سفید.
اشیای Entity¶
Entity یک موجودیت تجزیهشده یا تجزیهنشده را که در DTD اعلام شده است، نشان میدهد. این یک زیرکلاس از Node است. نودهای موجودیت در DocumentType.entities قرار دارند و نمیتوان آنها را در درخت سند درج کرد. نام موجودیت، nodeName آن است.
- Entity.publicId¶
شناسهی عمومی موجودیت، یا
Noneاگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
- Entity.systemId¶
شناسهی سیستمی موجودیت، یا
Noneاگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
- Entity.notationName¶
نام نمادگذاری برای یک موجودیت تجزیهنشده، یا
Noneبرای یک موجودیت تجزیهشده. این یک ویژگی فقطخواندنی است.
اشیای Notation¶
Notation یک نمادگذاری را که در DTD اعلام شده است، نشان میدهد. این یک زیرکلاس از Node است و نمیتواند نودهای فرزند داشته باشد. نودهای نمادگذاری در DocumentType.notations قرار دارند و نمیتوان آنها را در درخت سند درج کرد. نام نمادگذاری، nodeName آن است.
- Notation.publicId¶
شناسهی عمومی نمادگذاری، یا
Noneاگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
- Notation.systemId¶
شناسهی سیستمی نمادگذاری، یا
Noneاگر مشخص نشده باشد. این یک ویژگی فقطخواندنی است.
استثناها¶
توصیهنامهی DOM Level 2 یک استثنای واحد، DOMException، و تعدادی ثابت تعریف میکند که به برنامهها امکان میدهند تعیین کنند چه نوع خطایی رخ داده است. نمونههای DOMException دارای ویژگی code هستند که مقدار مناسب برای آن استثنای خاص را فراهم میکند.
رابط DOM پایتون ثابتها را فراهم میکند، اما مجموعه استثناها را نیز گسترش میدهد تا برای هر یک از کدهای استثنای تعریفشده توسط DOM، یک استثنای مشخص وجود داشته باشد. پیادهسازیها باید استثنای مشخص مناسب را پرتاب کنند، که هر کدام مقدار مناسبی برای ویژگی code دارند.
- exception xml.dom.DOMException¶
کلاس استثنای پایه که برای تمام استثناهای خاص DOM استفاده میشود. این کلاس استثنا نمیتواند مستقیماً نمونهسازی شود.
- exception xml.dom.DomstringSizeErr¶
زمانی پرتاب میشود که محدودهی مشخصشدهای از متن در یک رشته جا نشود. شناخته نیست که این مورد در پیادهسازیهای DOM پایتون استفاده شود، اما ممکن است از پیادهسازیهای DOM که با پایتون نوشته نشدهاند دریافت شود.
- exception xml.dom.HierarchyRequestErr¶
هنگامی که تلاشی برای درج یک گره در جایی که نوع گره مجاز نیست، انجام شود، پرتاب میشود.
- exception xml.dom.IndexSizeErr¶
هنگامی که یک پارامتر اندیس یا اندازهی یک متد منفی باشد یا از مقادیر مجاز فراتر رود، پرتاب میشود.
- exception xml.dom.InuseAttributeErr¶
هنگامی که تلاشی برای درج یک گره
Attrکه از قبل در جای دیگری از سند وجود دارد انجام شود، پرتاب میشود.
- exception xml.dom.InvalidAccessErr¶
در صورتی که پارامتر یا عملیاتی توسط شیء زیرین پشتیبانی نشود، پرتاب میشود.
- exception xml.dom.InvalidCharacterErr¶
این استثنا زمانی پرتاب میشود که یک پارامتر رشتهای شامل نویسهای باشد که در زمینهای که در آن به کار میرود، از نظر توصیهنامهی XML 1.0 مجاز نیست. برای مثال، تلاش برای ایجاد یک گره
Elementبا یک فاصله در نام نوع عنصر، باعث پرتاب این خطا میشود.
- exception xml.dom.InvalidModificationErr¶
هنگامی که تلاشی برای تغییر نوع یک گره انجام شود، پرتاب میشود.
- exception xml.dom.InvalidStateErr¶
هنگامی پرتاب میشود که تلاشی برای استفاده از شیءای انجام شود که تعریفنشده است یا دیگر قابل استفاده نیست.
- exception xml.dom.NamespaceErr¶
اگر تلاشی برای تغییر هر شیء به شکلی که با توجه به توصیهنامهی Namespaces in XML مجاز نیست صورت گیرد، این استثنا پرتاب میشود.
- exception xml.dom.NotFoundErr¶
استثنا برای زمانی که گرهای در زمینه ارجاعشده وجود ندارد. برای مثال،
NamedNodeMap.removeNamedItem()این استثنا را در صورتی پرتاب میکند که گره دادهشده در نگاشت وجود نداشته باشد.
- exception xml.dom.NotSupportedErr¶
هنگامی پرتاب میشود که پیادهسازی از نوع شیء یا عملیات درخواستشده پشتیبانی نکند.
- exception xml.dom.NoDataAllowedErr¶
این استثنا در صورتی پرتاب میشود که داده برای گرهای تعیین شود که از داده پشتیبانی نمیکند.
- exception xml.dom.NoModificationAllowedErr¶
در صورت تلاش برای تغییر یک شیء در شرایطی که تغییر مجاز نیست (مانند گرههای فقطخواندنی) پرتاب میشود.
- exception xml.dom.SyntaxErr¶
هنگامی که یک رشتهی نامعتبر یا غیرمجاز مشخص شود، پرتاب میشود.
- exception xml.dom.ValidationErr¶
این استثنا زمانی رخ میدهد که یک عملیات باعث میشود سند از نظر اعتبار جزئی نامعتبر شود. این مورد در پیادهسازیهای DOM پایتون شناخته نشده است، اما ممکن است از پیادهسازیهای DOM که به زبان پایتون نوشتهنشدهاند دریافت شود.
- exception xml.dom.WrongDocumentErr¶
زمانی پرتاب میشود که گرهای در سندی متفاوت از سندی که در حال حاضر به آن تعلق دارد درج شود، و پیادهسازی از انتقال گره از یک سند به سند دیگر پشتیبانی نکند.
کدهای استثنای تعریفشده در توصیهنامه DOM، مطابق این جدول به استثناهای شرحدادهشده در بالا نگاشت میشوند:
ثابت |
استثنا |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
انطباق¶
این بخش الزامات انطباق و روابط میان API DOM پایتون، توصیهنامههای DOM W3C و نگاشت OMG IDL برای پایتون را شرح میدهد.
نگاشت نوع¶
انواع IDL استفادهشده در مشخصات DOM، مطابق جدول زیر به انواع پایتون نگاشت میشوند.
نوع IDL |
نوع پایتون |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
متدهای دسترسی¶
نگاشت از OMG IDL به پایتون، توابع دسترسیگر را برای اعلانهای attribute در IDL تقریباً به همان شیوهای که نگاشت جاوا انجام میدهد، تعریف میکند. نگاشت اعلانهای IDL
readonly attribute string someValue;
attribute string anotherValue;
سه تابع دسترسیگر تولید میکند: یک متد «get» برای someValue (_get_someValue())، و متدهای «get» و «set» برای anotherValue (_get_anotherValue() و _set_anotherValue()). بهطور خاص، این نگاشت نیازی ندارد که ویژگیهای IDL بهعنوان ویژگیهای معمول پایتون قابلدسترسی باشند: object.someValue لزوماً کار نمیکند و ممکن است یک AttributeError ایجاد کند.
با این حال، API DOM پایتون الزام میکند که دسترسی عادی به ویژگیها کار کند. این بدان معناست که جانشینهای معمول (surrogates) تولیدشده توسط کامپایلرهای IDL پایتون احتمالاً کار نخواهند کرد، و اگر به اشیاء DOM از طریق CORBA دسترسی پیدا شود، ممکن است در سمت کلاینت به اشیاء پوششی نیاز باشد. اگرچه این موضوع مستلزم ملاحظات اضافی برای کلاینتهای DOM CORBA است، پیادهسازان باتجربه در استفاده از DOM بر بستر CORBA از پایتون، این را مشکل نمیدانند. ویژگیهایی که readonly اعلام شدهاند، ممکن است در همه پیادهسازیهای DOM دسترسی نوشتن را محدود نکنند.
در API DOM پایتون، نیازی به توابع دسترسی (accessor) نیست. در صورت ارائه، این توابع باید از شکل تعریفشده در نگاشت IDL پایتون (Python IDL mapping) پیروی کنند، اما این متدها غیرضروری تلقی میشوند، زیرا ویژگیها مستقیماً از پایتون قابلدسترسی هستند. برای ویژگیهای readonly هرگز نباید توابع دسترسی "Set" ارائه شوند.
تعاریف IDL بهطور کامل نیازمندیهای W3C DOM API را پوشش نمیدهند، مانند مفهومِ برخی اشیاء، مانند مقدار بازگشتیِ getElementsByTagName()، که «زنده» هستند. Python DOM API از پیادهسازیها نمیخواهد که چنین نیازمندیهایی را اعمال کنند.
اشیای کامنت¶
Commentیک کامنت در سند XML را نشان میدهد. این یک زیرکلاس ازCharacterDataاست.محتوای کامنت بهصورت یک رشته. این ویژگی تمام نویسههای بین
<!--آغازین و-->پایانی را در بر دارد، اما خود آنها را شامل نمیشود.