xml.dom --- Mô hình đối tượng tài liệu API

Source code: Lib/xml/dom/__init__.py


Mô hình đối tượng tài liệu, hay "DOM," là một API đa ngôn ngữ từ World Wide Web Consortium (W3C) để truy cập và sửa đổi các tài liệu XML. Việc triển khai DOM trình bày tài liệu XML dưới dạng cấu trúc cây hoặc cho phép mã máy khách xây dựng cấu trúc như vậy từ đầu. Sau đó, nó cấp quyền truy cập vào cấu trúc thông qua một tập hợp các đối tượng cung cấp các giao diện phổ biến.

Zz000zz cực kỳ hữu ích cho các ứng dụng truy cập ngẫu nhiên. SAX chỉ cho phép bạn xem một bit của tài liệu tại một thời điểm. Nếu bạn đang xem một phần tử SAX, bạn không có quyền truy cập vào phần tử khác. Nếu bạn đang xem một nút văn bản, bạn không có quyền truy cập vào phần tử chứa nó. Khi bạn viết một ứng dụng SAX, bạn cần theo dõi vị trí của chương trình trong tài liệu ở đâu đó trong mã của riêng bạn. SAX không làm điều đó cho bạn. Ngoài ra, nếu bạn cần xem trước tài liệu XML, bạn sẽ không gặp may.

Một số ứng dụng đơn giản là không thể thực hiện được trong mô hình hướng sự kiện không có quyền truy cập vào cây. Tất nhiên, bạn có thể tự xây dựng một số loại cây trong các sự kiện SAX, nhưng DOM cho phép bạn tránh phải viết mã đó. Zz002zz là biểu diễn cây tiêu chuẩn cho dữ liệu XML.

Mô hình đối tượng tài liệu đang được W3C xác định theo từng giai đoạn hoặc "cấp độ" theo thuật ngữ của họ. Ánh xạ Python của API về cơ bản dựa trên khuyến nghị DOM Cấp 2.

Các ứng dụng DOM thường bắt đầu bằng cách phân tích một số XML thành DOM. Cách thực hiện điều này hoàn toàn không được đề cập trong DOM Cấp 1 và Cấp 2 chỉ cung cấp những cải tiến hạn chế: Có một lớp đối tượng DOMImplementation cung cấp quyền truy cập vào các phương thức tạo Document, nhưng không có cách nào để truy cập trình đọc/phân tích cú pháp/Trình tạo tài liệu XML theo cách độc lập với việc triển khai. Cũng không có cách nào được xác định rõ ràng để truy cập các phương thức này mà không có đối tượng Document hiện có. Trong Python, mỗi lần triển khai DOM sẽ cung cấp một hàm getDOMImplementation(). DOM Cấp 3 bổ sung thông số Tải/Lưu trữ, xác định giao diện cho trình đọc, nhưng thông số này chưa có trong thư viện chuẩn Python.

Khi bạn có đối tượng tài liệu DOM, bạn có thể truy cập các phần của tài liệu XML thông qua các thuộc tính và phương thức của nó. Các thuộc tính này được xác định trong đặc tả DOM; phần này của tài liệu tham khảo mô tả cách diễn giải đặc tả bằng Python.

Thông số kỹ thuật do W3C cung cấp xác định DOM API cho Java, ECMAScript và OMG IDL. Ánh xạ Python được xác định ở đây phần lớn dựa trên phiên bản IDL của thông số kỹ thuật, nhưng không cần phải tuân thủ nghiêm ngặt (mặc dù việc triển khai miễn phí để hỗ trợ ánh xạ nghiêm ngặt từ IDL). Xem phần sự phù hợp để biết thảo luận chi tiết về các yêu cầu lập bản đồ.

Xem thêm

Document Object Model (DOM) Level 2 Specification

Đề xuất W3C làm cơ sở cho Python DOM API.

Document Object Model (DOM) Level 1 Specification

Đề xuất W3C cho DOM được xml.dom.minidom hỗ trợ.

Python Language Mapping Specification

Điều này chỉ định ánh xạ từ OMG IDL sang Python.

Nội dung mô-đun

Zz000zz chứa các chức năng sau:

xml.dom.registerDOMImplementation(name, factory)

Đăng ký hàm factory với tên name. Hàm xuất xưởng sẽ trả về một đối tượng triển khai giao diện DOMImplementation. Hàm xuất xưởng có thể trả về cùng một đối tượng mọi lúc hoặc một đối tượng mới cho mỗi cuộc gọi, nếu phù hợp với cách triển khai cụ thể (ví dụ: nếu việc triển khai đó hỗ trợ một số tùy chỉnh).

xml.dom.getDOMImplementation(name=None, features=())

Trả về cách triển khai DOM phù hợp. Zz004zz là tên mô-đun nổi tiếng của việc triển khai DOM hoặc None. Nếu không phải là None, hãy nhập mô-đun tương ứng và trả về đối tượng DOMImplementation nếu quá trình nhập thành công. Nếu không có tên nào được đặt và nếu biến môi trường PYTHON_DOM được đặt thì biến này sẽ được sử dụng để tìm cách triển khai.

Nếu tên không được cung cấp, thao tác này sẽ kiểm tra các triển khai có sẵn để tìm ra một triển khai có bộ tính năng được yêu cầu. Nếu không tìm thấy triển khai nào, hãy tăng ImportError. Danh sách tính năng phải là một chuỗi các cặp (feature, version) được truyền cho phương thức hasFeature() trên các đối tượng DOMImplementation có sẵn.

Một số hằng số tiện lợi cũng được cung cấp:

xml.dom.EMPTY_NAMESPACE

Giá trị được sử dụng để chỉ ra rằng không có vùng tên nào được liên kết với một nút trong DOM. Điều này thường được tìm thấy dưới dạng namespaceURI của một nút hoặc được sử dụng làm tham số namespaceURI cho một phương thức dành riêng cho không gian tên.

xml.dom.XML_NAMESPACE

Không gian tên URI được liên kết với tiền tố dành riêng xml, như được xác định bởi Namespaces in XML (phần 4).

xml.dom.XMLNS_NAMESPACE

Không gian tên URI để khai báo không gian tên, như được định nghĩa bởi Document Object Model (DOM) Level 2 Core Specification (phần 1.1.8).

xml.dom.XHTML_NAMESPACE

URI của không gian tên XHTML được xác định bởi XHTML 1.0: The Extensible HyperText Markup Language (phần 3.1.1).

Ngoài ra, xml.dom còn chứa một lớp Node cơ sở và các lớp ngoại lệ DOM. Lớp Node do mô-đun này cung cấp không triển khai bất kỳ phương thức hoặc thuộc tính nào được xác định bởi đặc tả DOM; Việc triển khai DOM cụ thể phải cung cấp những điều đó. Lớp Node được cung cấp như một phần của mô-đun này cung cấp các hằng số được sử dụng cho thuộc tính nodeType trên các đối tượng Node cụ thể; chúng được đặt trong lớp chứ không phải ở cấp mô-đun để tuân thủ các thông số kỹ thuật của DOM.

Các đối tượng trong DOM

Tài liệu chính xác cho DOM là thông số kỹ thuật DOM từ W3C.

Lưu ý rằng các thuộc tính DOM cũng có thể được xử lý dưới dạng nút thay vì dưới dạng chuỗi đơn giản. Tuy nhiên, khá hiếm khi bạn phải làm điều này, vì vậy việc sử dụng này vẫn chưa được ghi lại.

Giao diện

Phần

Mục đích

DOMImplementation

Đối tượng triển khai DOM

Giao diện với việc thực hiện cơ bản.

Node

Đối tượng nút

Giao diện cơ bản cho hầu hết các đối tượng trong tài liệu.

NodeList

Đối tượng danh sách nút

Giao diện cho một chuỗi các nút.

DocumentType

Đối tượng loại tài liệu

Thông tin về các khai báo cần thiết để xử lý một tài liệu.

Document

Đối tượng tài liệu

Đối tượng đại diện cho toàn bộ tài liệu.

Element

Đối tượng phần tử

Các nút phần tử trong hệ thống phân cấp tài liệu.

Attr

Đối tượng Attr

Các nút giá trị thuộc tính trên các nút phần tử.

Comment

Đối tượng bình luận

Trình bày các ý kiến trong tài liệu nguồn.

Text

Đối tượng văn bản và CDATASection

Các nút chứa nội dung văn bản từ tài liệu.

ProcessingInstruction

Đối tượng hướng dẫn xử lý

Xử lý biểu diễn hướng dẫn.

Phần bổ sung mô tả các ngoại lệ được xác định để làm việc với DOM trong Python.

Đối tượng triển khai DOM

Giao diện DOMImplementation cung cấp một cách để các ứng dụng xác định tính khả dụng của các tính năng cụ thể trong DOM mà chúng đang sử dụng. DOM Cấp 2 đã thêm khả năng tạo các đối tượng DocumentDocumentType mới bằng cách sử dụng DOMImplementation.

DOMImplementation.hasFeature(feature, version)

Trả về True nếu tính năng được xác định bởi cặp chuỗi featureversion được triển khai.

DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)

Trả về một đối tượng Document mới (gốc của DOM), với một đối tượng Element con có namespaceUriqualifiedName đã cho. Zz009zz phải là đối tượng DocumentType được tạo bởi createDocumentType() hoặc None. Trong Python DOM API, hai đối số đầu tiên cũng có thể là None để chỉ ra rằng không có Element con nào được tạo.

DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)

Trả về một đối tượng DocumentType mới đóng gói các chuỗi qualifiedName, publicIdsystemId đã cho, thể hiện thông tin có trong khai báo loại tài liệu XML.

Đối tượng nút

Tất cả các thành phần của tài liệu XML đều là lớp con của Node.

Node.nodeType

Một số nguyên đại diện cho loại nút. Các hằng số ký hiệu cho các loại nằm trên đối tượng Node: ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, CDATA_SECTION_NODE, ENTITY_NODE, PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODE. Đây là thuộc tính chỉ đọc.

Node.parentNode

Nút gốc của nút hiện tại hoặc None cho nút tài liệu. Giá trị luôn là đối tượng Node hoặc None. Đối với các nút Element, đây sẽ là phần tử cha, ngoại trừ phần tử gốc, trong trường hợp đó nó sẽ là đối tượng Document. Đối với các nút Attr, đây luôn là None. Đây là thuộc tính chỉ đọc.

Node.attributes

Một NamedNodeMap các đối tượng thuộc tính. Chỉ các phần tử mới có giá trị thực tế cho việc này; những người khác cung cấp None cho thuộc tính này. Đây là thuộc tính chỉ đọc.

Node.previousSibling

Nút ngay trước nút này có cùng cha mẹ. Ví dụ: phần tử có thẻ kết thúc xuất hiện ngay trước thẻ bắt đầu của phần tử self. Tất nhiên, tài liệu XML không chỉ được tạo thành từ các phần tử nên phần tử anh chị em trước đó có thể là văn bản, nhận xét hoặc nội dung nào khác. Nếu nút này là nút con đầu tiên của nút cha thì thuộc tính này sẽ là None. Đây là thuộc tính chỉ đọc.

Node.nextSibling

Nút ngay sau nút này có cùng cha mẹ. Xem thêm previousSibling. Nếu đây là con cuối cùng của cha mẹ thì thuộc tính này sẽ là None. Đây là thuộc tính chỉ đọc.

Node.childNodes

Danh sách các nút có trong nút này. Đây là thuộc tính chỉ đọc.

Node.firstChild

Nút con đầu tiên của nút, nếu có, hoặc None. Đây là thuộc tính chỉ đọc.

Node.lastChild

Nút con cuối cùng của nút, nếu có, hoặc None. Đây là thuộc tính chỉ đọc.

Node.localName

Phần tagName theo sau dấu hai chấm nếu có, phần còn lại là toàn bộ tagName. Giá trị là một chuỗi.

Node.prefix

Phần tagName đứng trước dấu hai chấm nếu có, phần còn lại là chuỗi trống. Giá trị là một chuỗi hoặc None.

Node.namespaceURI

Không gian tên được liên kết với tên thành phần. Đây sẽ là một chuỗi hoặc None. Đây là thuộc tính chỉ đọc.

Node.nodeName

Điều này có ý nghĩa khác nhau đối với từng loại nút; xem thông số kỹ thuật DOM để biết chi tiết. Bạn luôn có thể lấy thông tin bạn sẽ nhận được ở đây từ một thuộc tính khác, chẳng hạn như thuộc tính tagName cho các phần tử hoặc thuộc tính name cho thuộc tính. Đối với tất cả các loại nút, giá trị của thuộc tính này sẽ là chuỗi hoặc None. Đây là thuộc tính chỉ đọc.

Node.nodeValue

Điều này có ý nghĩa khác nhau đối với từng loại nút; xem thông số kỹ thuật DOM để biết chi tiết. Tình huống tương tự với nodeName. Giá trị là một chuỗi hoặc None.

Node.hasAttributes()

Trả về True nếu nút có bất kỳ thuộc tính nào.

Node.hasChildNodes()

Trả về True nếu nút có bất kỳ nút con nào.

Node.isSameNode(other)

Trả về True nếu other đề cập đến cùng một nút với nút này. Điều này đặc biệt hữu ích cho việc triển khai DOM sử dụng bất kỳ loại kiến ​​trúc proxy nào (vì nhiều đối tượng có thể tham chiếu đến cùng một nút).

Ghi chú

Điều này dựa trên DOM Cấp 3 API được đề xuất vẫn đang trong giai đoạn "bản thảo đang hoạt động", nhưng giao diện cụ thể này có vẻ không gây tranh cãi. Những thay đổi từ W3C sẽ không nhất thiết ảnh hưởng đến phương thức này trong giao diện Python DOM (mặc dù mọi W3C API mới cho điều này cũng sẽ được hỗ trợ).

Node.appendChild(newChild)

Thêm một nút con mới vào nút này ở cuối danh sách các nút con, trả về newChild. Nếu nút đã có trên cây thì nút đó sẽ bị xóa trước tiên.

Node.insertBefore(newChild, refChild)

Chèn một nút con mới trước một nút con hiện có. Chắc chắn refChild là con của nút này; nếu không, ValueError sẽ được nâng lên. newChild được trả lại. Nếu refChildNone, nó sẽ chèn newChild vào cuối danh sách trẻ em.

Node.removeChild(oldChild)

Loại bỏ một nút con. oldChild phải là nút con của nút này; nếu không, ValueError sẽ được nâng lên. oldChild được trả về thành công. Nếu oldChild không được sử dụng nữa thì phương thức unlink() của nó sẽ được gọi.

Node.replaceChild(newChild, oldChild)

Thay thế một nút hiện có bằng một nút mới. Phải là oldChild là con của nút này; nếu không, ValueError sẽ được nâng lên.

Node.normalize()

Nối các nút văn bản liền kề để tất cả các đoạn văn bản được lưu trữ dưới dạng các phiên bản Text đơn lẻ. Điều này giúp đơn giản hóa việc xử lý văn bản từ cây DOM cho nhiều ứng dụng.

Node.cloneNode(deep)

Sao chép nút này. Đặt deep có nghĩa là sao chép tất cả các nút con. Điều này trả về bản sao.

Đối tượng danh sách nút

Zz000zz đại diện cho một chuỗi các nút. Các đối tượng này được sử dụng theo hai cách trong đề xuất cốt lõi của DOM: một đối tượng Element cung cấp một đối tượng làm danh sách các nút con và các phương thức getElementsByTagName()getElementsByTagNameNS() của Node trả về các đối tượng có giao diện này để thể hiện kết quả truy vấn.

Đề xuất DOM Cấp 2 xác định một phương thức và một thuộc tính cho các đối tượng này:

NodeList.item(i)

Trả về mục thứ i từ chuỗi, nếu có, hoặc None. Chỉ số i không được phép nhỏ hơn 0 hoặc lớn hơn hoặc bằng độ dài của chuỗi.

NodeList.length

Số lượng nút trong chuỗi.

Ngoài ra, giao diện Python DOM yêu cầu cung cấp một số hỗ trợ bổ sung để cho phép các đối tượng NodeList được sử dụng làm chuỗi Python. Tất cả các triển khai NodeList phải bao gồm hỗ trợ cho __len__()__getitem__(); điều này cho phép lặp lại NodeList trong các câu lệnh for và hỗ trợ thích hợp cho hàm tích hợp len().

Nếu việc triển khai DOM hỗ trợ sửa đổi tài liệu thì việc triển khai NodeList cũng phải hỗ trợ các phương thức __setitem__()__delitem__().

Đối tượng loại tài liệu

Thông tin về các ký hiệu và thực thể được khai báo bởi một tài liệu (bao gồm tập hợp con bên ngoài nếu trình phân tích cú pháp sử dụng nó và có thể cung cấp thông tin) có sẵn từ đối tượng DocumentType. DocumentType cho một tài liệu có sẵn từ thuộc tính doctype của đối tượng Document; nếu không có khai báo DOCTYPE cho tài liệu, thuộc tính doctype của tài liệu sẽ được đặt thành None thay vì một phiên bản của giao diện này.

DocumentType là một chuyên môn của Node và thêm các thuộc tính sau:

DocumentType.publicId

Mã định danh công khai cho tập hợp con bên ngoài của định nghĩa loại tài liệu. Đây sẽ là một chuỗi hoặc None.

DocumentType.systemId

Mã định danh hệ thống cho tập hợp con bên ngoài của định nghĩa loại tài liệu. Đây sẽ là URI dưới dạng một chuỗi hoặc None.

DocumentType.internalSubset

Một chuỗi cung cấp tập hợp con nội bộ hoàn chỉnh từ tài liệu. Điều này không bao gồm các dấu ngoặc bao quanh tập hợp con. Nếu tài liệu không có tập hợp con bên trong thì đây phải là None.

DocumentType.name

Tên của phần tử gốc như được nêu trong khai báo DOCTYPE, nếu có.

DocumentType.entities

Đây là NamedNodeMap đưa ra định nghĩa về các thực thể bên ngoài. Đối với các tên thực thể được xác định nhiều lần, chỉ định nghĩa đầu tiên được cung cấp (các tên khác bị bỏ qua theo yêu cầu của đề xuất XML). Đây có thể là None nếu thông tin không được trình phân tích cú pháp cung cấp hoặc nếu không có thực thể nào được xác định.

DocumentType.notations

Đây là NamedNodeMap đưa ra định nghĩa về các ký hiệu. Đối với các tên ký hiệu được xác định nhiều lần, chỉ định nghĩa đầu tiên được cung cấp (các tên khác bị bỏ qua theo yêu cầu của đề xuất XML). Đây có thể là None nếu thông tin không được trình phân tích cú pháp cung cấp hoặc nếu không có ký hiệu nào được xác định.

Đối tượng tài liệu

Document đại diện cho toàn bộ tài liệu XML, bao gồm các thành phần cấu thành, thuộc tính, hướng dẫn xử lý, nhận xét, v.v. Hãy nhớ rằng nó kế thừa các thuộc tính từ Node.

Document.documentElement

Phần tử gốc duy nhất của tài liệu.

Document.createElement(tagName)

Tạo và trả về một nút phần tử mới. Phần tử không được chèn vào tài liệu khi nó được tạo. Bạn cần chèn nó một cách rõ ràng bằng một trong các phương pháp khác như insertBefore() hoặc appendChild().

Document.createElementNS(namespaceURI, tagName)

Tạo và trả về một phần tử mới có không gian tên. Zz002zz có thể có tiền tố. Phần tử không được chèn vào tài liệu khi nó được tạo. Bạn cần chèn nó một cách rõ ràng bằng một trong các phương pháp khác như insertBefore() hoặc appendChild().

Document.createTextNode(data)

Tạo và trả về một nút văn bản chứa dữ liệu được truyền dưới dạng tham số. Giống như các phương pháp tạo khác, phương pháp này không chèn nút vào cây.

Document.createComment(data)

Tạo và trả về một nút nhận xét chứa dữ liệu được truyền dưới dạng tham số. Giống như các phương pháp tạo khác, phương pháp này không chèn nút vào cây.

Document.createProcessingInstruction(target, data)

Tạo và trả về nút lệnh xử lý chứa targetdata được truyền dưới dạng tham số. Giống như các phương pháp tạo khác, phương pháp này không chèn nút vào cây.

Document.createAttribute(name)

Tạo và trả về một nút thuộc tính. Phương pháp này không liên kết nút thuộc tính với bất kỳ phần tử cụ thể nào. Bạn phải sử dụng setAttributeNode() trên đối tượng Element thích hợp để sử dụng phiên bản thuộc tính mới được tạo.

Document.createAttributeNS(namespaceURI, qualifiedName)

Tạo và trả về một nút thuộc tính có không gian tên. Zz002zz có thể có tiền tố. Phương pháp này không liên kết nút thuộc tính với bất kỳ phần tử cụ thể nào. Bạn phải sử dụng setAttributeNode() trên đối tượng Element thích hợp để sử dụng phiên bản thuộc tính mới được tạo.

Document.getElementsByTagName(tagName)

Tìm kiếm tất cả con cháu (con trực tiếp, con của con, v.v.) với tên loại phần tử cụ thể.

Document.getElementsByTagNameNS(namespaceURI, localName)

Tìm kiếm tất cả con cháu (con trực tiếp, con của con, v.v.) với một không gian tên cụ thể URI và localname. Tên địa phương là một phần của không gian tên sau tiền tố.

Đối tượng phần tử

Element là lớp con của Node nên kế thừa tất cả các thuộc tính của lớp đó.

Element.tagName

Tên loại phần tử. Trong tài liệu sử dụng không gian tên, nó có thể có dấu hai chấm trong đó. Giá trị là một chuỗi.

Element.getElementsByTagName(tagName)

Tương tự như phương thức tương đương trong lớp Document.

Element.getElementsByTagNameNS(namespaceURI, localName)

Tương tự như phương thức tương đương trong lớp Document.

Element.hasAttribute(name)

Trả về True nếu phần tử có thuộc tính được đặt tên bởi name.

Element.hasAttributeNS(namespaceURI, localName)

Trả về True nếu phần tử có thuộc tính được đặt tên bởi namespaceURIlocalName.

Element.getAttribute(name)

Trả về giá trị của thuộc tính được đặt tên bởi name dưới dạng chuỗi. Nếu không có thuộc tính nào tồn tại thì một chuỗi trống sẽ được trả về, coi như thuộc tính đó không có giá trị.

Element.getAttributeNode(attrname)

Trả về nút Attr cho thuộc tính được đặt tên bởi attrname.

Element.getAttributeNS(namespaceURI, localName)

Trả về giá trị của thuộc tính được đặt tên bởi namespaceURIlocalName dưới dạng chuỗi. Nếu không có thuộc tính nào tồn tại thì một chuỗi trống sẽ được trả về, coi như thuộc tính đó không có giá trị.

Element.getAttributeNodeNS(namespaceURI, localName)

Trả về một giá trị thuộc tính dưới dạng nút, cho trước namespaceURIlocalName.

Element.removeAttribute(name)

Xóa một thuộc tính theo tên. Nếu không có thuộc tính phù hợp, NotFoundErr sẽ được nâng lên.

Element.removeAttributeNode(oldAttr)

Xóa và trả lại oldAttr khỏi danh sách thuộc tính, nếu có. Nếu oldAttr không xuất hiện, NotFoundErr sẽ được nâng lên.

Element.removeAttributeNS(namespaceURI, localName)

Xóa một thuộc tính theo tên. Lưu ý rằng nó sử dụng localName chứ không phải qname. Không có ngoại lệ nào được đưa ra nếu không có thuộc tính phù hợp.

Element.setAttribute(name, value)

Đặt giá trị thuộc tính từ một chuỗi.

Element.setAttributeNode(newAttr)

Thêm nút thuộc tính mới vào phần tử, thay thế thuộc tính hiện có nếu cần nếu thuộc tính name khớp. Nếu xảy ra sự thay thế, nút thuộc tính cũ sẽ được trả về. Nếu newAttr đã được sử dụng, InuseAttributeErr sẽ được nâng lên.

Element.setAttributeNodeNS(newAttr)

Thêm nút thuộc tính mới vào phần tử, thay thế thuộc tính hiện có nếu cần nếu thuộc tính namespaceURIlocalName khớp. Nếu xảy ra sự thay thế, nút thuộc tính cũ sẽ được trả về. Nếu newAttr đã được sử dụng, InuseAttributeErr sẽ được nâng lên.

Element.setAttributeNS(namespaceURI, qname, value)

Đặt giá trị thuộc tính từ một chuỗi, cho trước namespaceURIqname. Lưu ý rằng qname là toàn bộ tên thuộc tính. Điều này khác với ở trên.

Đối tượng Attr

Attr kế thừa từ Node nên kế thừa tất cả các thuộc tính của nó.

Attr.name

Tên thuộc tính. Trong tài liệu sử dụng không gian tên, nó có thể bao gồm dấu hai chấm.

Attr.localName

Phần tên theo sau dấu hai chấm nếu có, nếu không thì toàn bộ tên. Đây là thuộc tính chỉ đọc.

Attr.prefix

Phần tên đứng trước dấu hai chấm nếu có, phần còn lại là chuỗi trống.

Attr.value

Giá trị văn bản của thuộc tính. Đây là từ đồng nghĩa với thuộc tính nodeValue.

Đối tượng NamedNodeMap

NamedNodeMapnot kế thừa từ Node không.

NamedNodeMap.length

Độ dài của danh sách thuộc tính.

NamedNodeMap.item(index)

Trả về một thuộc tính có chỉ mục cụ thể. Thứ tự bạn nhận các thuộc tính là tùy ý nhưng sẽ nhất quán trong suốt vòng đời của DOM. Mỗi mục là một nút thuộc tính. Nhận giá trị của nó với thuộc tính value.

Ngoài ra còn có các phương pháp thử nghiệm giúp lớp này có nhiều hành vi ánh xạ hơn. Bạn có thể sử dụng chúng hoặc bạn có thể sử dụng họ phương thức getAttribute*() được tiêu chuẩn hóa trên các đối tượng Element.

Đối tượng bình luận

Comment đại diện cho một nhận xét trong tài liệu XML. Nó là lớp con của Node, nhưng không thể có các nút con.

Comment.data

Nội dung của bình luận dưới dạng một chuỗi. Thuộc tính này chứa tất cả các ký tự nằm giữa <!-- ở đầu và --> ở cuối, nhưng không bao gồm chúng.

Đối tượng văn bản và CDATASection

Giao diện Text đại diện cho văn bản trong tài liệu XML. Nếu trình phân tích cú pháp và triển khai DOM hỗ trợ phần mở rộng XML của DOM, các phần văn bản nằm trong các phần được đánh dấu CDATA sẽ được lưu trữ trong các đối tượng CDATASection. Hai giao diện này giống hệt nhau nhưng cung cấp các giá trị khác nhau cho thuộc tính nodeType.

Các giao diện này mở rộng giao diện Node. Họ không thể có các nút con.

Text.data

Nội dung của nút văn bản dưới dạng một chuỗi.

Ghi chú

Việc sử dụng nút CDATASection không chỉ ra rằng nút đó đại diện cho phần được đánh dấu CDATA hoàn chỉnh, chỉ có nghĩa là nội dung của nút đó là một phần của phần CDATA. Một phần CDATA có thể được biểu thị bằng nhiều nút trong cây tài liệu. Không có cách nào để xác định xem hai nút CDATASection liền kề có đại diện cho các phần được đánh dấu CDATA khác nhau hay không.

Đối tượng hướng dẫn xử lý

Biểu thị hướng dẫn xử lý trong tài liệu XML; cái này kế thừa từ giao diện Node và không thể có các nút con.

ProcessingInstruction.target

Nội dung của hướng dẫn xử lý lên đến ký tự khoảng trắng đầu tiên. Đây là thuộc tính chỉ đọc.

ProcessingInstruction.data

Nội dung của lệnh xử lý theo sau ký tự khoảng trắng đầu tiên.

Ngoại lệ

Đề xuất DOM Cấp 2 xác định một ngoại lệ duy nhất, DOMException và một số hằng số cho phép ứng dụng xác định loại lỗi nào đã xảy ra. Các phiên bản DOMException mang thuộc tính code cung cấp giá trị phù hợp cho ngoại lệ cụ thể.

Giao diện DOM của Python cung cấp các hằng số, nhưng cũng mở rộng tập hợp các ngoại lệ để tồn tại một ngoại lệ cụ thể cho từng mã ngoại lệ được xác định bởi DOM. Việc triển khai phải đưa ra ngoại lệ cụ thể thích hợp, mỗi ngoại lệ mang giá trị phù hợp cho thuộc tính code.

exception xml.dom.DOMException

Lớp ngoại lệ cơ sở được sử dụng cho tất cả các ngoại lệ DOM cụ thể. Lớp ngoại lệ này không thể được khởi tạo trực tiếp.

exception xml.dom.DomstringSizeErr

Xảy ra khi một phạm vi văn bản được chỉ định không vừa với một chuỗi. Điều này không được biết là sẽ được sử dụng trong triển khai DOM của Python, nhưng có thể được nhận từ các triển khai DOM không được viết bằng Python.

exception xml.dom.HierarchyRequestErr

Xảy ra khi cố gắng chèn một nút trong đó loại nút không được phép.

exception xml.dom.IndexSizeErr

Xảy ra khi tham số chỉ mục hoặc kích thước của một phương thức là âm hoặc vượt quá giá trị cho phép.

exception xml.dom.InuseAttributeErr

Xảy ra khi cố gắng chèn nút Attr đã có ở nơi khác trong tài liệu.

exception xml.dom.InvalidAccessErr

Tăng lên nếu một tham số hoặc một thao tác không được hỗ trợ trên đối tượng cơ bản.

exception xml.dom.InvalidCharacterErr

Ngoại lệ này được đưa ra khi tham số chuỗi chứa ký tự không được phép trong ngữ cảnh nó đang được đề xuất XML 1.0 sử dụng. Ví dụ: cố gắng tạo nút Element có khoảng trắng trong tên loại phần tử sẽ gây ra lỗi này.

exception xml.dom.InvalidModificationErr

Xảy ra khi cố gắng sửa đổi loại nút.

exception xml.dom.InvalidStateErr

Xảy ra khi cố gắng sử dụng một đối tượng không được xác định hoặc không còn sử dụng được nữa.

exception xml.dom.NamespaceErr

Nếu cố gắng thay đổi bất kỳ đối tượng nào theo cách không được phép liên quan đến đề xuất Namespaces in XML, ngoại lệ này sẽ được đưa ra.

exception xml.dom.NotFoundErr

Ngoại lệ khi nút không tồn tại trong ngữ cảnh được tham chiếu. Ví dụ: NamedNodeMap.removeNamedItem() sẽ đưa ra điều này nếu nút được truyền vào không tồn tại trên bản đồ.

exception xml.dom.NotSupportedErr

Xảy ra khi việc triển khai không hỗ trợ loại đối tượng hoặc thao tác được yêu cầu.

exception xml.dom.NoDataAllowedErr

Điều này được nêu ra nếu dữ liệu được chỉ định cho một nút không hỗ trợ dữ liệu.

exception xml.dom.NoModificationAllowedErr

Phát sinh khi cố gắng sửa đổi một đối tượng không được phép sửa đổi (chẳng hạn như đối với các nút chỉ đọc).

exception xml.dom.SyntaxErr

Xảy ra khi một chuỗi không hợp lệ hoặc không hợp lệ được chỉ định.

exception xml.dom.WrongDocumentErr

Xảy ra khi một nút được chèn vào một tài liệu khác với tài liệu hiện tại và việc triển khai không hỗ trợ di chuyển nút từ tài liệu này sang tài liệu khác.

Các mã ngoại lệ được xác định trong đề xuất DOM ánh xạ tới các ngoại lệ được mô tả ở trên theo bảng này:

Hằng số

Ngoại lệ

DOMSTRING_SIZE_ERR

DomstringSizeErr

HIERARCHY_REQUEST_ERR

HierarchyRequestErr

INDEX_SIZE_ERR

IndexSizeErr

INUSE_ATTRIBUTE_ERR

InuseAttributeErr

INVALID_ACCESS_ERR

InvalidAccessErr

INVALID_CHARACTER_ERR

InvalidCharacterErr

INVALID_MODIFICATION_ERR

InvalidModificationErr

INVALID_STATE_ERR

InvalidStateErr

NAMESPACE_ERR

NamespaceErr

NOT_FOUND_ERR

NotFoundErr

NOT_SUPPORTED_ERR

NotSupportedErr

NO_DATA_ALLOWED_ERR

NoDataAllowedErr

NO_MODIFICATION_ALLOWED_ERR

NoModificationAllowedErr

SYNTAX_ERR

SyntaxErr

WRONG_DOCUMENT_ERR

WrongDocumentErr

sự phù hợp

Phần này mô tả các yêu cầu tuân thủ và mối quan hệ giữa DOM API, đề xuất W3C DOM và ánh xạ OMG IDL cho Python.

Ánh xạ loại

Các loại IDL được sử dụng trong đặc tả DOM được ánh xạ tới các loại Python theo bảng sau.

Loại IDL

Loại Python

boolean

bool hoặc int

int

int

long int

int

unsigned int

int

DOMString

str hoặc bytes

null

None

Phương thức truy cập

Ánh xạ từ OMG IDL sang Python xác định các hàm truy cập cho các khai báo IDL attribute giống như cách ánh xạ Java thực hiện. Ánh xạ các khai báo IDL

chuỗi thuộc tính chỉ đọc someValue;
         chuỗi thuộc tính anotherValue;

mang lại ba hàm truy cập: phương thức "get" cho someValue (_get_someValue()) và phương thức "get" và "set" cho anotherValue (_get_anotherValue()_set_anotherValue()). Đặc biệt, ánh xạ không yêu cầu các thuộc tính IDL có thể truy cập được như các thuộc tính Python thông thường: object.someValue cần có not để hoạt động và có thể tăng AttributeError.

Tuy nhiên, DOM API của Python, does yêu cầu quyền truy cập thuộc tính thông thường đó hoạt động. Điều này có nghĩa là các đại diện thay thế điển hình được tạo bởi trình biên dịch IDL của Python không có khả năng hoạt động và các đối tượng trình bao bọc có thể cần thiết trên máy khách nếu các đối tượng DOM được truy cập thông qua CORBA. Mặc dù điều này đòi hỏi phải xem xét bổ sung đối với các máy khách CORBA DOM, nhưng những người triển khai có kinh nghiệm sử dụng DOM trên CORBA từ Python không coi đây là một vấn đề. Các thuộc tính được khai báo readonly có thể không hạn chế quyền truy cập ghi trong tất cả các triển khai DOM.

Trong Python DOM API, không cần có các hàm truy cập. Nếu được cung cấp, chúng phải có dạng được xác định bởi ánh xạ IDL của Python, nhưng những phương thức này được coi là không cần thiết vì các thuộc tính có thể truy cập trực tiếp từ Python. Không bao giờ được cung cấp bộ truy cập "Đặt" cho thuộc tính readonly.

Các định nghĩa IDL không thể hiện đầy đủ các yêu cầu của W3C DOM API, chẳng hạn như khái niệm về một số đối tượng nhất định, chẳng hạn như giá trị trả về của getElementsByTagName(), là "trực tiếp". Python DOM API không yêu cầu triển khai để thực thi các yêu cầu đó.