Mô-đun không an toàn trước dữ liệu được xây dựng độc hại. Nếu bạn cần phân tích dữ liệu không đáng tin cậy hoặc chưa được xác thực, hãy xem
20. 5. 1. hướng dẫn
Đây là một hướng dẫn ngắn để sử dụng [viết tắt là _______09]. Mục tiêu là để chứng minh một số khối xây dựng và khái niệm cơ bản của mô-đun
20. 5. 1. 1. Cây XML và các phần tử
XML là một định dạng dữ liệu phân cấp vốn có và cách tự nhiên nhất để biểu diễn nó là bằng một cái cây.
root = ET.fromstring[country_data_as_string]9 có hai lớp cho mục đích này - đại diện cho toàn bộ tài liệu XML dưới dạng cây và đại diện cho một nút trong cây này. Các tương tác với toàn bộ tài liệu [đọc và ghi vào/từ tệp] thường được thực hiện ở cấp độ. Các tương tác với một phần tử XML duy nhất và các phần tử con của nó được thực hiện ở cấp độ
20. 5. 1. 2. Phân tích cú pháp XML
Chúng tôi sẽ sử dụng tài liệu XML sau làm dữ liệu mẫu cho phần này
1 2008 141100 4 2011 59900 68 2011 13600
Chúng tôi có thể nhập dữ liệu này bằng cách đọc từ một tệp
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]
Hoặc trực tiếp từ một chuỗi
root = ET.fromstring[country_data_as_string]
phân tích cú pháp XML từ một chuỗi trực tiếp thành một , là phần tử gốc của cây được phân tích cú pháp. Các chức năng phân tích cú pháp khác có thể tạo ra một. Kiểm tra tài liệu để chắc chắn
Là một ,
>>> root.tag 'data' >>> root.attrib {}9 có một thẻ và một từ điển các thuộc tính
>>> root.tag 'data' >>> root.attrib {}
Nó cũng có các nút con mà chúng ta có thể lặp lại
>>> for child in root: .. print[child.tag, child.attrib] ... country {'name': 'Liechtenstein'} country {'name': 'Singapore'} country {'name': 'Panama'}
Các nút con được lồng vào nhau và chúng ta có thể truy cập các nút con cụ thể theo chỉ mục
________số 8
Ghi chú
Không phải tất cả các phần tử của đầu vào XML sẽ kết thúc dưới dạng các phần tử của cây được phân tích cú pháp. Hiện tại, mô-đun này bỏ qua mọi nhận xét XML, hướng dẫn xử lý và khai báo loại tài liệu trong đầu vào. Tuy nhiên, cây được xây dựng bằng API của mô-đun này thay vì phân tích cú pháp từ văn bản XML có thể có nhận xét và hướng dẫn xử lý trong đó; . Một khai báo loại tài liệu có thể được truy cập bằng cách chuyển một thể hiện tùy chỉnh cho hàm tạo
20. 5. 1. 3. API kéo để phân tích cú pháp không chặn
Hầu hết các chức năng phân tích cú pháp do mô-đun này cung cấp đều yêu cầu phải đọc toàn bộ tài liệu cùng một lúc trước khi trả về bất kỳ kết quả nào. Có thể sử dụng một và cung cấp dữ liệu vào nó theo từng bước, nhưng đó là API đẩy gọi các phương thức trên mục tiêu gọi lại, mức này quá thấp và bất tiện cho hầu hết các nhu cầu. Đôi khi, điều người dùng thực sự muốn là có thể phân tích cú pháp XML dần dần mà không cần chặn các thao tác, đồng thời tận hưởng sự tiện lợi của các đối tượng được xây dựng đầy đủ
Công cụ mạnh mẽ nhất để làm điều này là. Nó không yêu cầu chặn đọc để lấy dữ liệu XML và thay vào đó được cung cấp dữ liệu tăng dần bằng các lệnh gọi. Để lấy các phần tử XML được phân tích cú pháp, hãy gọi. Đây là một ví dụ
>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end
Trường hợp sử dụng rõ ràng là các ứng dụng hoạt động theo kiểu không chặn trong đó dữ liệu XML đang được nhận từ một ổ cắm hoặc đọc dần dần từ một số thiết bị lưu trữ. Trong những trường hợp như vậy, việc chặn đọc là không thể chấp nhận được
Bởi vì nó rất linh hoạt, có thể gây bất tiện khi sử dụng cho các trường hợp sử dụng đơn giản hơn. Nếu bạn không phiền khi ứng dụng của mình chặn đọc dữ liệu XML nhưng vẫn muốn có khả năng phân tích cú pháp gia tăng, hãy xem. Nó có thể hữu ích khi bạn đang đọc một tài liệu XML lớn và không muốn giữ nó hoàn toàn trong bộ nhớ
20. 5. 1. 4. Tìm kiếm các yếu tố thú vị
có một số phương thức hữu ích giúp lặp lại đệ quy trên tất cả các cây con bên dưới nó [con của nó, con của chúng, v.v.]. Ví dụ,
root = ET.fromstring[country_data_as_string]0
chỉ tìm các phần tử có thẻ là phần tử con trực tiếp của phần tử hiện tại. tìm phần tử con đầu tiên với một thẻ cụ thể và truy cập nội dung văn bản của phần tử. truy cập các thuộc tính của phần tử
root = ET.fromstring[country_data_as_string]1
Đặc điểm kỹ thuật tinh vi hơn của những yếu tố để tìm kiếm là có thể bằng cách sử dụng
20. 5. 1. 5. Sửa đổi tệp XML
cung cấp một cách đơn giản để xây dựng tài liệu XML và ghi chúng vào tệp. Phương pháp phục vụ mục đích này
Sau khi được tạo, một đối tượng có thể được thao tác bằng cách thay đổi trực tiếp các trường của nó [chẳng hạn như ], thêm và sửa đổi các thuộc tính [phương thức], cũng như thêm các phần tử con mới [ví dụ như với ]
Giả sử chúng ta muốn thêm một vào thứ hạng của mỗi quốc gia và thêm thuộc tính
>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end1 vào thành phần thứ hạng
root = ET.fromstring[country_data_as_string]3
XML của chúng tôi bây giờ trông như thế này
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]0
Chúng ta có thể loại bỏ các phần tử bằng cách sử dụng. Giả sử chúng tôi muốn xóa tất cả các quốc gia có thứ hạng cao hơn 50
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]1
XML của chúng tôi bây giờ trông như thế này
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]2
20. 5. 1. 6. Xây dựng tài liệu XML
Hàm này cũng cung cấp một cách thuận tiện để tạo các phần tử con mới cho một phần tử nhất định
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]3
20. 5. 1. 7. Phân tích cú pháp XML bằng Không gian tên
Nếu đầu vào XML có không gian tên, thẻ và thuộc tính có tiền tố ở dạng
>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end4 được mở rộng thành
>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end5 trong đó tiền tố được thay thế bằng URI đầy đủ. Ngoài ra, nếu có , URI đầy đủ đó sẽ được thêm vào trước tất cả các thẻ không có tiền tố
Dưới đây là một ví dụ XML kết hợp hai không gian tên, một có tiền tố là “hư cấu” và cái còn lại đóng vai trò là không gian tên mặc định
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]4
Một cách để tìm kiếm và khám phá ví dụ XML này là thêm URI theo cách thủ công vào mọi thẻ hoặc thuộc tính trong xpath của một hoặc
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]5
Một cách tốt hơn để tìm kiếm ví dụ về không gian tên XML là tạo một từ điển với các tiền tố của riêng bạn và sử dụng chúng trong các chức năng tìm kiếm
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]6
Hai cách tiếp cận này đều xuất ra
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]7
20. 5. 1. 8. tài nguyên bổ sung
xem http. // effbot. org/zone/element-index. htm để biết hướng dẫn và liên kết đến các tài liệu khác
20. 5. 2. hỗ trợ XPath
Mô-đun này cung cấp hỗ trợ hạn chế cho các biểu thức XPath để định vị các phần tử trong cây. Mục tiêu là hỗ trợ một tập hợp con nhỏ của cú pháp viết tắt;
20. 5. 2. 1. Ví dụ
Đây là một ví dụ thể hiện một số khả năng XPath của mô-đun. Chúng ta sẽ sử dụng tài liệu XML
>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end8 từ phần
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]8
20. 5. 2. 2. Cú pháp XPath được hỗ trợ
SyntaxMeaning>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end9Chọn tất cả các phần tử con với thẻ đã cho. Ví dụ,
root = ET.fromstring[country_data_as_string]00 chọn tất cả các phần tử con có tên là
root = ET.fromstring[country_data_as_string]00, và
root = ET.fromstring[country_data_as_string]02 chọn tất cả các cháu có tên là
root = ET.fromstring[country_data_as_string]03 trong tất cả các phần tử con có tên là
root = ET.fromstring[country_data_as_string]00.
root = ET.fromstring[country_data_as_string]05Chọn tất cả các phần tử con. Ví dụ,
root = ET.fromstring[country_data_as_string]06 chọn tất cả các cháu có tên là
root = ET.fromstring[country_data_as_string]03.
root = ET.fromstring[country_data_as_string]08Chọn nút hiện tại. Điều này chủ yếu hữu ích khi bắt đầu đường dẫn, để chỉ ra rằng đó là đường dẫn tương đối.
root = ET.fromstring[country_data_as_string]09Chọn tất cả các phần tử phụ, ở tất cả các cấp bên dưới phần tử hiện tại. Ví dụ:
root = ET.fromstring[country_data_as_string]10 chọn tất cả các phần tử
root = ET.fromstring[country_data_as_string]03 trong toàn bộ cây.
root = ET.fromstring[country_data_as_string]12Chọn phần tử cha. Trả về
root = ET.fromstring[country_data_as_string]13 nếu đường dẫn cố gắng tiếp cận tổ tiên của phần tử bắt đầu [phần tử
root = ET.fromstring[country_data_as_string]14 được gọi].
root = ET.fromstring[country_data_as_string]15Chọn tất cả các phần tử có thuộc tính đã cho.
root = ET.fromstring[country_data_as_string]16Chọn tất cả các phần tử mà thuộc tính đã cho có giá trị đã cho. Giá trị không thể chứa dấu ngoặc kép.
root = ET.fromstring[country_data_as_string]17Chọn tất cả các phần tử có tên con là
>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end9. Chỉ những đứa trẻ ngay lập tức được hỗ trợ.
root = ET.fromstring[country_data_as_string]19
Chọn tất cả các phần tử có nội dung văn bản hoàn chỉnh, bao gồm cả phần tử con, bằng với
root = ET.fromstring[country_data_as_string]30 đã cho
Mới trong phiên bản 3. 7
root = ET.fromstring[country_data_as_string]31Chọn tất cả các phần tử có con tên là
>>> parser = ET.XMLPullParser[['start', 'end']] >>> parser.feed['sometext'] >>> list[parser.read_events[]] [['start', ]] >>> parser.feed[' more text'] >>> for event, elem in parser.read_events[]: .. print[event] .. print[elem.tag, 'text=', elem.text] ... end9 có nội dung văn bản hoàn chỉnh, bao gồm cả con cháu, bằng với
root = ET.fromstring[country_data_as_string]30 đã cho.
root = ET.fromstring[country_data_as_string]34Chọn tất cả các phần tử nằm ở vị trí đã cho. Vị trí có thể là một số nguyên [1 là vị trí đầu tiên], biểu thức
root = ET.fromstring[country_data_as_string]35 [đối với vị trí cuối cùng] hoặc vị trí tương ứng với vị trí cuối cùng [e. g.
root = ET.fromstring[country_data_as_string]36]
Vị ngữ [biểu thức trong dấu ngoặc vuông] phải được đặt trước tên thẻ, dấu hoa thị hoặc vị ngữ khác.
root = ET.fromstring[country_data_as_string]37 vị ngữ phải được đặt trước tên thẻ
20. 5. 3. Thẩm quyền giải quyết
20. 5. 3. 1. Chức năng
root = ET.fromstring[country_data_as_string]38
root = ET.fromstring[country_data_as_string]39 [ text=None ]
Nhà máy phần tử nhận xét. Chức năng xuất xưởng này tạo ra một phần tử đặc biệt sẽ được tuần tự hóa dưới dạng nhận xét XML bởi trình tuần tự hóa tiêu chuẩn. Chuỗi nhận xét có thể là chuỗi byte hoặc chuỗi Unicode. văn bản là một chuỗi chứa chuỗi nhận xét. Trả về một thể hiện phần tử đại diện cho một nhận xét
Lưu ý rằng bỏ qua các nhận xét trong đầu vào thay vì tạo các đối tượng nhận xét cho chúng. An sẽ chỉ chứa các nút nhận xét nếu chúng đã được chèn vào cây bằng một trong các phương thức
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]04 [ elem ]
Viết một cây phần tử hoặc cấu trúc phần tử cho sys. tiêu chuẩn. Chức năng này chỉ nên được sử dụng để gỡ lỗi
Định dạng đầu ra chính xác phụ thuộc vào việc triển khai. Trong phiên bản này, nó được viết dưới dạng tệp XML thông thường
elem là một cây phần tử hoặc một phần tử riêng lẻ
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]06 [ văn bản ]
Phân tích cú pháp một phần XML từ một hằng chuỗi. Giống như. văn bản là một chuỗi chứa dữ liệu XML. Trả về một thể hiện
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]10 [ sequence, parser=None ]
Phân tích một tài liệu XML từ một chuỗi các đoạn chuỗi. trình tự là một danh sách hoặc trình tự khác chứa các đoạn dữ liệu XML. trình phân tích cú pháp là một phiên bản trình phân tích cú pháp tùy chọn. Nếu không được cung cấp, trình phân tích cú pháp tiêu chuẩn được sử dụng. Trả về một thể hiện
Mới trong phiên bản 3. 2
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]14 [ phần tử ]
Kiểm tra xem một đối tượng có phải là một đối tượng phần tử hợp lệ không. phần tử là một thể hiện phần tử. Trả về một giá trị thực nếu đây là một đối tượng phần tử
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]16 [ nguồn, sự kiện=Không, trình phân tích cú pháp=Không ]
Phân tích từng phần một phần XML thành một cây phần tử và báo cáo những gì đang diễn ra cho người dùng. nguồn là tên tệp hoặc chứa dữ liệu XML. sự kiện là một chuỗi các sự kiện để báo cáo lại. Các sự kiện được hỗ trợ là các chuỗi
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]17,
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]18,
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]19 và
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]20 [các sự kiện “ns” được sử dụng để lấy thông tin chi tiết về không gian tên]. Nếu các sự kiện bị bỏ qua, chỉ các sự kiện
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]18 được báo cáo. trình phân tích cú pháp là một phiên bản trình phân tích cú pháp tùy chọn. Nếu không được cung cấp, trình phân tích cú pháp tiêu chuẩn được sử dụng. trình phân tích cú pháp phải là một lớp con và chỉ có thể sử dụng mặc định làm mục tiêu. Trả về một cặp
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]25 cung cấp
Lưu ý rằng trong khi xây dựng cây tăng dần, nó sẽ chặn các lần đọc trên nguồn [hoặc tệp mà nó đặt tên]. Do đó, nó không phù hợp với các ứng dụng không thể chặn đọc. Để phân tích cú pháp không chặn hoàn toàn, xem
Ghi chú
chỉ đảm bảo rằng nó đã nhìn thấy ký tự “>” của thẻ bắt đầu khi nó phát ra sự kiện “bắt đầu”, vì vậy các thuộc tính được xác định, nhưng nội dung của các thuộc tính văn bản và đuôi không được xác định tại thời điểm đó. Điều tương tự cũng áp dụng cho phần tử con;
Nếu bạn cần một phần tử được điền đầy đủ, thay vào đó hãy tìm các sự kiện “kết thúc”
Không dùng nữa kể từ phiên bản 3. 4. Đối số trình phân tích cú pháp.
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]30 [ source, parser=None ]
Phân tích một phần XML thành một cây phần tử. nguồn là tên tệp hoặc đối tượng tệp chứa dữ liệu XML. trình phân tích cú pháp là một phiên bản trình phân tích cú pháp tùy chọn. Nếu không được cung cấp, trình phân tích cú pháp tiêu chuẩn được sử dụng. Trả về một thể hiện
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]34 [ mục tiêu, văn bản=None ]
nhà máy phần tử PI. Chức năng xuất xưởng này tạo ra một phần tử đặc biệt sẽ được tuần tự hóa dưới dạng hướng dẫn xử lý XML. mục tiêu là một chuỗi chứa mục tiêu PI. văn bản là một chuỗi chứa nội dung PI, nếu được cung cấp. Trả về một thể hiện phần tử, đại diện cho một lệnh xử lý
Lưu ý rằng bỏ qua các hướng dẫn xử lý trong đầu vào thay vì tạo các đối tượng nhận xét cho chúng. An sẽ chỉ chứa các nút lệnh xử lý nếu chúng đã được chèn vào cây bằng một trong các phương thức
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]39 [ tiền tố, uri ]
Đăng ký một tiền tố không gian tên. Cơ quan đăng ký là toàn cầu và mọi ánh xạ hiện có cho tiền tố đã cho hoặc URI không gian tên sẽ bị xóa. tiền tố là một tiền tố không gian tên. uri là một không gian tên uri. Các thẻ và thuộc tính trong không gian tên này sẽ được đánh số thứ tự với tiền tố đã cho, nếu có thể
Mới trong phiên bản 3. 2
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]41 [ cha mẹ, thẻ, attrib={}, **phụ ]
nhà máy phụ kiện. Hàm này tạo một thể hiện phần tử và nối nó vào một phần tử hiện có
Tên phần tử, tên thuộc tính và giá trị thuộc tính có thể là chuỗi byte hoặc chuỗi Unicode. parent là phần tử cha. thẻ là tên phần tử con. attrib là một từ điển tùy chọn, chứa các thuộc tính phần tử. bổ sung chứa các thuộc tính bổ sung, được cung cấp dưới dạng đối số từ khóa. Trả về một thể hiện phần tử
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]43 [ element, encoding="us-ascii", method="xml", *, short_empty_elements=True ]
Tạo một biểu diễn chuỗi của một phần tử XML, bao gồm tất cả các phần tử con. phần tử là một thể hiện. mã hóa là mã hóa đầu ra [mặc định là US-ASCII]. Sử dụng
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]45 để tạo chuỗi Unicode [nếu không, chuỗi phụ sẽ được tạo]. phương thức là
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]46,
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]47 hoặc
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]48 [mặc định là
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]46]. short_empty_elements có cùng ý nghĩa như trong. Trả về một chuỗi mã hóa [tùy chọn] chứa dữ liệu XML
Mới trong phiên bản 3. 4. Tham số short_empty_elements.
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]52 [ element, encoding="us-ascii", method="xml", *, short_empty_elements=True ]
Tạo một biểu diễn chuỗi của một phần tử XML, bao gồm tất cả các phần tử con. phần tử là một thể hiện. mã hóa là mã hóa đầu ra [mặc định là US-ASCII]. Sử dụng
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]45 để tạo chuỗi Unicode [nếu không, chuỗi phụ sẽ được tạo]. phương thức là
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]46,
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]47 hoặc
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]48 [mặc định là
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]46]. short_empty_elements có cùng ý nghĩa như trong. Trả về danh sách các chuỗi được mã hóa [tùy chọn] chứa dữ liệu XML. Nó không đảm bảo bất kỳ trình tự cụ thể nào, ngoại trừ
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]60
Mới trong phiên bản 3. 2
Mới trong phiên bản 3. 4. Tham số short_empty_elements.
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]62 [ text, parser=None ]
Phân tích cú pháp một phần XML từ một hằng chuỗi. Hàm này có thể được sử dụng để nhúng “chữ XML” vào mã Python. văn bản là một chuỗi chứa dữ liệu XML. trình phân tích cú pháp là một phiên bản trình phân tích cú pháp tùy chọn. Nếu không được cung cấp, trình phân tích cú pháp tiêu chuẩn được sử dụng. Trả về một thể hiện
root = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]66 [ text, parser=None ]
Phân tích cú pháp một phần XML từ một hằng chuỗi và cũng trả về một từ điển ánh xạ từ id phần tử. s để các yếu tố. văn bản là một chuỗi chứa dữ liệu XML. trình phân tích cú pháp là một phiên bản trình phân tích cú pháp tùy chọn. Nếu không được cung cấp, trình phân tích cú pháp tiêu chuẩn được sử dụng. Trả về một bộ chứa một thể hiện và một từ điển
20. 5. 3. 2. Đối tượng phần tử
lớproot = ET.fromstring[country_data_as_string]38
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]70 [ tag, attrib={}, **extra ]
lớp phần tử. Lớp này định nghĩa giao diện Phần tử và cung cấp triển khai tham chiếu của giao diện này
Tên phần tử, tên thuộc tính và giá trị thuộc tính có thể là chuỗi byte hoặc chuỗi Unicode. thẻ là tên phần tử. attrib là một từ điển tùy chọn, chứa các thuộc tính phần tử. bổ sung chứa các thuộc tính bổ sung, được cung cấp dưới dạng đối số từ khóa
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]71
Một chuỗi xác định loại dữ liệu mà phần tử này đại diện [nói cách khác là loại phần tử]
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]72
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]73
Các thuộc tính này có thể được sử dụng để chứa dữ liệu bổ sung được liên kết với phần tử. Giá trị của chúng thường là các chuỗi nhưng có thể là bất kỳ đối tượng dành riêng cho ứng dụng nào. Nếu phần tử được tạo từ một tệp XML, thì thuộc tính văn bản chứa văn bản nằm giữa thẻ bắt đầu của phần tử và thẻ con đầu tiên hoặc thẻ kết thúc của nó hoặc
root = ET.fromstring[country_data_as_string]13 và thuộc tính đuôi chứa văn bản giữa thẻ kết thúc của phần tử và thẻ tiếp theo . Đối với dữ liệu XML
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]9
phần tử a có
root = ET.fromstring[country_data_as_string]13 cho cả thuộc tính văn bản và đuôi, phần tử b có văn bản
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]77 và đuôi
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]78, phần tử c có văn bản
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]79 và đuôi
root = ET.fromstring[country_data_as_string]13, và phần tử d có văn bản
root = ET.fromstring[country_data_as_string]13 và đuôi
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]82
Để thu thập văn bản bên trong của một phần tử, xem ví dụ
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]84
Các ứng dụng có thể lưu trữ các đối tượng tùy ý trong các thuộc tính này
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]85
Một từ điển chứa các thuộc tính của phần tử. Lưu ý rằng mặc dù giá trị attrib luôn là một từ điển Python có thể thay đổi thực sự, nhưng việc triển khai ElementTree có thể chọn sử dụng một biểu diễn nội bộ khác và chỉ tạo từ điển nếu ai đó yêu cầu nó. Để tận dụng lợi thế của việc triển khai như vậy, hãy sử dụng các phương thức từ điển bên dưới bất cứ khi nào có thể
Các phương thức giống như từ điển sau đây hoạt động trên các thuộc tính phần tử
______386 []Đặt lại một phần tử. Hàm này loại bỏ tất cả các thành phần phụ, xóa tất cả các thuộc tính và đặt các thuộc tính văn bản và đuôi thành
root = ET.fromstring[country_data_as_string]13
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]88 [ key, default=None ]
Lấy thuộc tính phần tử có tên key
Trả về giá trị thuộc tính hoặc mặc định nếu không tìm thấy thuộc tính
______389 []Trả về các thuộc tính phần tử dưới dạng một chuỗi các cặp [tên, giá trị]. Các thuộc tính được trả về theo thứ tự tùy ý
______390 []Trả về tên thuộc tính phần tử dưới dạng danh sách. Tên được trả về theo thứ tự tùy ý
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]91 [ khóa, giá trị ]
Đặt khóa thuộc tính trên phần tử thành giá trị
Các phương thức sau hoạt động trên phần tử con [phần tử phụ]
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]92 [ phần tử phụ ]
Thêm phần tử con vào cuối danh sách phần tử con bên trong của phần tử này. Tăng nếu phần tử phụ không phải là một
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]95 [ phần tử con ]
Nối thêm các phần tử con từ một đối tượng chuỗi không có hoặc nhiều phần tử. Tăng nếu một phần tử con không phải là một
Mới trong phiên bản 3. 2
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]98 [ match, namespaces=None ]
Tìm phần tử phụ đầu tiên phù hợp. trận đấu có thể là một tên thẻ hoặc một. Trả về một thể hiện phần tử hoặc
root = ET.fromstring[country_data_as_string]13. không gian tên là ánh xạ tùy chọn từ tiền tố không gian tên sang tên đầy đủ
root = ET.fromstring[country_data_as_string]00 [ match, namespaces=None ]
Tìm tất cả các phần tử phụ phù hợp, theo tên thẻ hoặc. Trả về danh sách chứa tất cả các phần tử phù hợp theo thứ tự tài liệu. không gian tên là ánh xạ tùy chọn từ tiền tố không gian tên sang tên đầy đủ
root = ET.fromstring[country_data_as_string]01 [ match, default=None, namespaces=None ]
Tìm văn bản cho phần tử phụ đầu tiên khớp với đối sánh. trận đấu có thể là một tên thẻ hoặc một. Trả về nội dung văn bản của phần tử khớp đầu tiên hoặc trả về giá trị mặc định nếu không tìm thấy phần tử nào. Lưu ý rằng nếu phần tử phù hợp không có nội dung văn bản, một chuỗi rỗng sẽ được trả về. không gian tên là ánh xạ tùy chọn từ tiền tố không gian tên sang tên đầy đủ
root = ET.fromstring[country_data_as_string]02 []
Không dùng nữa kể từ phiên bản 3. 2. Sử dụng
root = ET.fromstring[country_data_as_string]03 hoặc lặp lại.
root = ET.fromstring[country_data_as_string]04 [ tag=None ]
Không dùng nữa kể từ phiên bản 3. 2. Sử dụng phương pháp thay thế.
root = ET.fromstring[country_data_as_string]06 [ chỉ mục, phần tử con ]
Chèn phần tử con vào vị trí đã cho trong phần tử này. Tăng nếu phần tử phụ không phải là một
root = ET.fromstring[country_data_as_string]09 [ tag=None ]
Tạo một cây với phần tử hiện tại là gốc. Trình vòng lặp lặp lại phần tử này và tất cả các phần tử bên dưới nó, theo thứ tự tài liệu [độ sâu trước]. Nếu thẻ không phải là
root = ET.fromstring[country_data_as_string]13 hoặc
root = ET.fromstring[country_data_as_string]11, chỉ các phần tử có thẻ bằng thẻ được trả về từ trình vòng lặp. Nếu cấu trúc cây bị sửa đổi trong quá trình lặp, kết quả là không xác định
Mới trong phiên bản 3. 2
root = ET.fromstring[country_data_as_string]12 [ match, namespaces=None ]
Tìm tất cả các phần tử phụ phù hợp, theo tên thẻ hoặc. Trả về một iterable mang lại tất cả các phần tử phù hợp theo thứ tự tài liệu. không gian tên là ánh xạ tùy chọn từ tiền tố không gian tên sang tên đầy đủ
Mới trong phiên bản 3. 2
root = ET.fromstring[country_data_as_string]13 []
Tạo một trình lặp văn bản. Trình vòng lặp lặp qua phần tử này và tất cả các phần tử con, theo thứ tự tài liệu và trả về tất cả văn bản bên trong
Mới trong phiên bản 3. 2
root = ET.fromstring[country_data_as_string]14 [ thẻ, thuộc tính ]
Tạo một đối tượng phần tử mới cùng loại với phần tử này. Đừng gọi phương thức này, thay vào đó hãy sử dụng chức năng xuất xưởng
root = ET.fromstring[country_data_as_string]16 [ phần tử phụ ]
Loại bỏ phần tử con khỏi phần tử. Không giống như các phương thức find*, phương thức này so sánh các phần tử dựa trên danh tính cá thể, không dựa trên giá trị thẻ hoặc nội dung
các đối tượng cũng hỗ trợ các phương thức kiểu trình tự sau đây để làm việc với các phần tử con. , , ,
thận trọng. Các phần tử không có phần tử phụ sẽ kiểm tra là
root = ET.fromstring[country_data_as_string]22. Hành vi này sẽ thay đổi trong các phiên bản sau. Thay vào đó, hãy sử dụng bài kiểm tra
root = ET.fromstring[country_data_as_string]23 hoặc
root = ET.fromstring[country_data_as_string]24 cụ thể
root = ET.fromstring[country_data_as_string]0
20. 5. 3. 3. Đối tượng ElementTree
lớproot = ET.fromstring[country_data_as_string]38
root = ET.fromstring[country_data_as_string]26 [ element=None, file=None ]
Lớp bao bọc ElementTree. Lớp này đại diện cho toàn bộ hệ thống phân cấp phần tử và thêm một số hỗ trợ bổ sung cho tuần tự hóa đến và từ XML tiêu chuẩn
phần tử là phần tử gốc. Cây được khởi tạo với nội dung của tệp XML nếu được cung cấp
root = ET.fromstring[country_data_as_string]27 [ phần tử ]
Thay thế phần tử gốc cho cây này. Điều này loại bỏ nội dung hiện tại của cây và thay thế nó bằng phần tử đã cho. Sử dụng cẩn thận. phần tử là một thể hiện phần tử
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]98 [ match, namespaces=None ]
Giống như , bắt đầu từ gốc của cây
root = ET.fromstring[country_data_as_string]00 [ match, namespaces=None ]
Giống như , bắt đầu từ gốc của cây
root = ET.fromstring[country_data_as_string]01 [ match, default=None, namespaces=None ]
Giống như , bắt đầu từ gốc của cây
root = ET.fromstring[country_data_as_string]04 [ tag=None ]
Không dùng nữa kể từ phiên bản 3. 2. Sử dụng phương pháp thay thế.
root = ET.fromstring[country_data_as_string]36 []
Trả về phần tử gốc cho cây này
root = ET.fromstring[country_data_as_string]09 [ tag=None ]
Tạo và trả về một trình lặp cây cho phần tử gốc. Trình vòng lặp lặp qua tất cả các phần tử trong cây này, theo thứ tự phần. tag là thẻ cần tìm [mặc định là trả về tất cả các phần tử]
root = ET.fromstring[country_data_as_string]12 [ match, namespaces=None ]
Giống như , bắt đầu từ gốc của cây
Mới trong phiên bản 3. 2
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]30 [ source, parser=None ]
Tải một phần XML bên ngoài vào cây phần tử này. nguồn là một tên tập tin hoặc. trình phân tích cú pháp là một phiên bản trình phân tích cú pháp tùy chọn. Nếu không được cung cấp, trình phân tích cú pháp tiêu chuẩn được sử dụng. Trả về phần tử gốc của phần
root = ET.fromstring[country_data_as_string]42 [ file, encoding="us-ascii", xml_declaration=None, default_namespace=None, method="xml", * ]
Ghi cây phần tử vào một tệp, dưới dạng XML. tệp là tên tệp hoặc được mở để ghi. mã hóa là mã hóa đầu ra [mặc định là US-ASCII]. xml_declaration kiểm soát nếu một khai báo XML nên được thêm vào tệp. Sử dụng
root = ET.fromstring[country_data_as_string]22 cho trường hợp không bao giờ,
root = ET.fromstring[country_data_as_string]44 cho trường hợp luôn luôn, chỉ sử dụng
root = ET.fromstring[country_data_as_string]13 nếu không phải là US-ASCII hoặc UTF-8 hoặc Unicode [mặc định là
root = ET.fromstring[country_data_as_string]13]. default_namespace đặt không gian tên XML mặc định [cho “xmlns”]. phương thức là
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]46,
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]47 hoặc
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]48 [mặc định là
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]46]. Tham số short_empty_elements chỉ từ khóa kiểm soát định dạng của các phần tử không chứa nội dung. Nếu
root = ET.fromstring[country_data_as_string]44 [mặc định], chúng được phát ra dưới dạng một thẻ tự đóng duy nhất, nếu không, chúng được phát ra dưới dạng một cặp thẻ bắt đầu/kết thúc
Đầu ra là một chuỗi [] hoặc nhị phân []. Điều này được kiểm soát bởi đối số mã hóa. Nếu mã hóa là
root = ET.fromstring[country_data_as_string]54, đầu ra là một chuỗi; . Lưu ý rằng điều này có thể xung đột với loại tệp nếu đó là tệp đang mở;
Mới trong phiên bản 3. 4. Tham số short_empty_elements.
Đây là tệp XML sẽ được thao tác
root = ET.fromstring[country_data_as_string]1
Ví dụ về việc thay đổi thuộc tính “mục tiêu” của mọi liên kết trong đoạn đầu tiên
root = ET.fromstring[country_data_as_string]2
20. 5. 3. 4. QName đối tượng
lớproot = ET.fromstring[country_data_as_string]38
root = ET.fromstring[country_data_as_string]56 [ text_or_uri, tag=None ]
Trình bao bọc QName. Điều này có thể được sử dụng để bọc một giá trị thuộc tính QName, để có được xử lý không gian tên thích hợp trên đầu ra. text_or_uri là một chuỗi chứa giá trị QName, ở dạng {uri}cục bộ hoặc, nếu đối số thẻ được cung cấp, phần URI của QName. Nếu thẻ được đưa ra, đối số đầu tiên được hiểu là URI và đối số này được hiểu là tên cục bộ. trường hợp không rõ ràng
20. 5. 3. 5. TreeBuilder đối tượng
lớproot = ET.fromstring[country_data_as_string]38
root = ET.fromstring[country_data_as_string]59 [ element_factory=None ]
Trình tạo cấu trúc phần tử chung. Trình tạo này chuyển đổi một chuỗi các lệnh gọi phương thức bắt đầu, dữ liệu và kết thúc thành một cấu trúc phần tử được định dạng tốt. Bạn có thể sử dụng lớp này để xây dựng cấu trúc phần tử bằng trình phân tích cú pháp XML tùy chỉnh hoặc trình phân tích cú pháp cho một số định dạng giống như XML khác. element_factory, khi được cung cấp, phải là một đối số có thể gọi được chấp nhận hai đối số vị trí. một thẻ và một lệnh của các thuộc tính. Dự kiến sẽ trả về một thể hiện phần tử mới
root = ET.fromstring[country_data_as_string]60 []
Xóa bộ đệm trình tạo và trả về phần tử tài liệu cấp cao nhất. Trả về một thể hiện
root = ET.fromstring[country_data_as_string]62 [ dữ liệu ]
Thêm văn bản vào phần tử hiện tại. dữ liệu là một chuỗi. Đây phải là một chuỗi byte hoặc chuỗi Unicode
root = ET.fromstring[country_data_as_string]63 [ thẻ ]
Đóng phần tử hiện tại. thẻ là tên phần tử. Trả về phần tử đã đóng
root = ET.fromstring[country_data_as_string]64 [ tag, attrs ]
Mở một phần tử mới. thẻ là tên phần tử. attrs là một từ điển chứa các thuộc tính phần tử. Trả về phần tử đã mở
Ngoài ra, một đối tượng tùy chỉnh có thể cung cấp phương thức sau
root = ET.fromstring[country_data_as_string]66 [ tên, công khai, hệ thống ]
Xử lý một khai báo doctype. tên là tên loại tài liệu. pubid là định danh công khai. hệ thống là định danh hệ thống. Phương thức này không tồn tại trên lớp mặc định
Mới trong phiên bản 3. 2
20. 5. 3. 6. Đối tượng XMLParser
lớproot = ET.fromstring[country_data_as_string]38
root = ET.fromstring[country_data_as_string]69 [ html=0, target=None, encoding=None ]
Lớp này là khối xây dựng cấp thấp của mô-đun. Nó sử dụng để phân tích cú pháp XML dựa trên sự kiện hiệu quả. Nó có thể được cung cấp dữ liệu XML tăng dần bằng phương thức và các sự kiện phân tích cú pháp được dịch sang API đẩy - bằng cách gọi các cuộc gọi lại trên đối tượng đích. Nếu mục tiêu bị bỏ qua, tiêu chuẩn được sử dụng. Đối số html trước đây được sử dụng để tương thích ngược và hiện không được dùng nữa. Nếu mã hóa được cung cấp, giá trị sẽ ghi đè mã hóa được chỉ định trong tệp XML
Không dùng nữa kể từ phiên bản 3. 4. Đối số html. Các đối số còn lại phải được chuyển qua từ khóa để chuẩn bị cho việc xóa đối số html.
root = ET.fromstring[country_data_as_string]60 []
Kết thúc việc cung cấp dữ liệu cho trình phân tích cú pháp. Trả về kết quả của việc gọi phương thức
root = ET.fromstring[country_data_as_string]74 của mục tiêu được truyền trong quá trình xây dựng;
root = ET.fromstring[country_data_as_string]66 [ tên, công khai, hệ thống ]
Không dùng nữa kể từ phiên bản 3. 2. Xác định phương thức trên mục tiêu TreeBuilder tùy chỉnh.
root = ET.fromstring[country_data_as_string]77 [ dữ liệu ]
Cung cấp dữ liệu cho trình phân tích cú pháp. dữ liệu được mã hóa dữ liệu
gọi phương thức
root = ET.fromstring[country_data_as_string]79 của target cho mỗi thẻ mở, phương thức
root = ET.fromstring[country_data_as_string]80 của nó cho mỗi thẻ đóng và dữ liệu được xử lý theo phương thức
root = ET.fromstring[country_data_as_string]81. gọi phương thức của mục tiêu
root = ET.fromstring[country_data_as_string]74. có thể được sử dụng không chỉ để xây dựng cấu trúc cây. Đây là một ví dụ về đếm độ sâu tối đa của tệp XML
root = ET.fromstring[country_data_as_string]3
20. 5. 3. 7. Đối tượng XMLPullParser
lớproot = ET.fromstring[country_data_as_string]38
root = ET.fromstring[country_data_as_string]86 [ events=None ]
Trình phân tích cú pháp kéo phù hợp cho các ứng dụng không chặn. API phía đầu vào của nó tương tự như API của , nhưng thay vì đẩy lệnh gọi đến mục tiêu gọi lại, nó thu thập danh sách nội bộ gồm các sự kiện phân tích cú pháp và cho phép người dùng đọc từ đó. sự kiện là một chuỗi các sự kiện để báo cáo lại. Các sự kiện được hỗ trợ là các chuỗi
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]17,
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]18,
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]19 và
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]20 [các sự kiện “ns” được sử dụng để lấy thông tin chi tiết về không gian tên]. Nếu các sự kiện bị bỏ qua, chỉ các sự kiện
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]18 được báo cáo
root = ET.fromstring[country_data_as_string]77 [ dữ liệu ]
Cung cấp dữ liệu byte đã cho cho trình phân tích cú pháp
root = ET.fromstring[country_data_as_string]60 []
Báo hiệu cho trình phân tích cú pháp rằng luồng dữ liệu đã kết thúc. Không giống như , phương thức này luôn trả về. Mọi sự kiện chưa được truy xuất khi đóng trình phân tích cú pháp vẫn có thể được đọc bằng
____099 []Trả về một trình lặp qua các sự kiện đã gặp phải trong dữ liệu được cung cấp cho trình phân tích cú pháp. Trình vòng lặp tạo ra các cặp
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]25, trong đó sự kiện là một chuỗi đại diện cho loại sự kiện [e. g.
import xml.etree.ElementTree as ET tree = ET.parse['country_data.xml'] root = tree.getroot[]18] và elem là đối tượng gặp phải
Các sự kiện được cung cấp trong cuộc gọi trước đó sẽ không được cung cấp lại. Các sự kiện được sử dụng từ hàng đợi nội bộ chỉ khi chúng được truy xuất từ trình lặp, do đó, nhiều trình đọc lặp song song trên các trình vòng lặp thu được từ đó sẽ có kết quả không thể đoán trước
Ghi chú
chỉ đảm bảo rằng nó đã nhìn thấy ký tự “>” của thẻ bắt đầu khi nó phát ra sự kiện “bắt đầu”, vì vậy các thuộc tính được xác định, nhưng nội dung của các thuộc tính văn bản và đuôi không được xác định tại thời điểm đó. Điều tương tự cũng áp dụng cho phần tử con;
Nếu bạn cần một phần tử được điền đầy đủ, thay vào đó hãy tìm các sự kiện “kết thúc”
Mới trong phiên bản 3. 4
20. 5. 3. 8. ngoại lệ
lớproot = ET.fromstring[country_data_as_string]38____507
Lỗi phân tích cú pháp XML, phát sinh bởi các phương pháp phân tích cú pháp khác nhau trong mô-đun này khi phân tích cú pháp không thành công. Biểu diễn chuỗi của một phiên bản ngoại lệ này sẽ chứa thông báo lỗi thân thiện với người dùng. Ngoài ra, nó sẽ có sẵn các thuộc tính sau
>>> root.tag 'data' >>> root.attrib {}08
Mã lỗi số từ trình phân tích cú pháp người nước ngoài. Xem tài liệu về danh sách các mã lỗi và ý nghĩa của chúng