Etree trong Python là gì?

Loại Phần tử là một đối tượng chứa linh hoạt, được thiết kế để lưu trữ cấu trúc dữ liệu phân cấp trong bộ nhớ. Loại có thể được mô tả dưới dạng giao thoa giữa danh sách và từ điển

Mỗi phần tử có một số thuộc tính liên kết với nó

  • một thẻ là 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ử)
  • một số thuộc tính, được lưu trữ trong từ điển Python
  • một chuỗi văn bản
  • một chuỗi đuôi tùy chọn
  • một số phần tử con, được lưu trữ trong chuỗi Python

Để tạo một thể hiện phần tử, hãy sử dụng các hàm Element hoặc SubElement của nhà máy

Lớp này có thể được sử dụng để bọc một cấu trúc phần tử và chuyển đổi nó từ và sang XML

Việc triển khai C của API này có sẵn dưới dạng xml. cây etree. cElementTree .

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. Trang của Fredrik Lundh cũng là vị trí của phiên bản phát triển của xml. cây etree. Yếu TốCây

Chức năng

xml. cây etree. Yếu TốCây. Nhận xét( [ văn bản ] )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. Chuỗi nhận xét có thể là một đối tượng chỉ có mã ASCII hoặc một đối tượng. 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. xml. cây etree. Yếu TốCây. kết xuất (phần tử)

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ẻ

xml. cây etree. Yếu TốCây. Phần tử(thẻ [ , thuộc tính ][, **extra])

nhà máy nguyên tố. Hàm này trả về một đối tượng triển khai giao diện Element tiêu chuẩn. Lớp hoặc loại chính xác của đối tượng đó phụ thuộc vào việc triển khai, nhưng nó sẽ luôn tương thích với lớp _ElementInterface trong mô-đun này

Tên phần tử, tên thuộc tính và giá trị thuộc tính có thể là một đối tượng chỉ có mã ASCII hoặc một đối tượng. 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. Trả về một thể hiện phần tử

xml. cây etree. Yếu TốCây. fromstring(text) Phân tích cú pháp một phần XML từ một hằng chuỗi. Tương tự như XML. văn bản là một chuỗi chứa dữ liệu XML. Trả về một thể hiện Phần tử. xml. cây etree. Yếu TốCây. iselement(element)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ử. xml. cây etree. Yếu TốCây. iterparse(source [ , events ] ) Phân tích cú pháp một phần XML thành một . nguồn là tên tệp hoặc đối tượng tệp chứa dữ liệu XML. sự kiện là một danh sách các sự kiện để báo cáo lại. Nếu bỏ qua, chỉ các sự kiện "kết thúc" được báo cáo. Trả về một cặp cung cấp (event, elem) . xml. cây etree. Yếu TốCây. parse(source [ , parser ] ) Phân tích cú pháp một phần XML thành mộ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 XMLTreeBuilder tiêu chuẩn được sử dụng. Trả về một phiên bản ElementTree. xml. cây etree. Yếu TốCây. Chế biếnHướng dẫn(mục tiêu [ , văn bản ] )Nhà máy sản xuất 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ý. xml. cây etree. Yếu TốCây. Phần tử con(cha, thẻ [ , thuộc tính [ , **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à một đối tượng chỉ có mã ASCII hoặc một đối tượng. 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ử

xml. cây etree. Yếu TốCây. tostring(element [ , encoding ] )Tạo biểu diễn chuỗi của một . phần tử là một thể hiện Element. mã hóa là mã hóa đầu ra (mặc định là US-ASCII). Trả về một chuỗi được mã hóa chứa dữ liệu XML. xml. cây etree. Yếu TốCây. XML(text) 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ả về một thể hiện Phần tử. xml. cây etree. Yếu TốCây. XMLID(text) 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ả về một bộ chứa một thể hiện Phần tử và một từ điển.

Giao diện phần tử

Các đối tượng phần tử được trả về bởi Element hoặc SubElement có các phương thức và thuộc tính sau

Thành phần. tagMộ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ử). Thành phần. văn bản Thuộc tính văn bản có thể được sử dụng để chứa dữ liệu bổ sung được liên kết với phần tử. Như tên ngụ ý, thuộc tính này thường là một 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ừ tệp XML, thuộc tính sẽ chứa bất kỳ văn bản nào được tìm thấy giữa các thẻ phần tử. Thành phần. tailThuộc tính tail có thể được sử dụng để chứa dữ liệu bổ sung được liên kết với phần tử. Thuộc tính này thường là một chuỗi nhưng có thể là bất kỳ đối tượng cụ thể nào của ứng dụng. Nếu phần tử được tạo từ tệp XML thì thuộc tính sẽ chứa bất kỳ văn bản nào được tìm thấy sau thẻ kết thúc của phần tử và trước thẻ tiếp theo. Thành phần. từ điển attribA 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ử

Phần tử. clear() Đặ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 Không có. Thành phần. get(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

Thành phần. items() 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 ý. Thành phần. keys()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 ý. Thành phần. set(key, value)Đặ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ụ)

Phần tử. append(phần tử con)Thêm phần tử con vào cuối danh sách phần tử con nội bộ của phần tử này. Thành phần. find(match)Tìm phần tử phụ đầu tiên phù hợp. đối sánh có thể là tên thẻ hoặc đường dẫn. Trả về một phiên bản phần tử hoặc Không có . Thành phần. findall(match)Tìm tất cả các phần tử con phù hợp. đối sánh có thể là tên thẻ hoặc đường dẫn. 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. Thành phần. findtext(condition [ , default=None ] )Tìm văn bản cho . điều kiện có thể là tên thẻ hoặc đường dẫn. 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ề. Thành phần. getchildren() Trả về tất cả các phần tử con. Các phần tử được trả về theo thứ tự tài liệu. Thành phần. getiterator( [ tag=None ] )Tạo trình lặp cây bằng . Trình 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ó khớp với thẻ đã cho. Nếu thẻ là None hoặc '*' thì tất cả các phần tử được lặp lại. Trả về một iterable cung cấp các đối tượng phần tử theo thứ tự tài liệu (độ sâu trước). Thành phần. insert(index, element) Chèn một phần tử con vào vị trí đã cho trong phần tử này. Thành phần. makeelement(tag, attrib)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 hàm SubElement factory. Thành phần. remove(phần tử con)Xóa phần tử con khỏi phần tử. Không giống như các phương thức findXYZ, phương pháp 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 phần tử 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. Vì các đối tượng Phần tử không định nghĩa một phương thức nên các phần tử không có phần tử con sẽ kiểm tra là Sai .

element = root.find('foo')

if not element: # careful!
    print("element not found, or element has no subelements")

if element is None:
    print("element not found")

Đối tượng ElementTree

lớp xml. cây etree. Yếu TốCây. ElementTree( [ element ][, file])

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

_setroot(element)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ử. find(path)Tìm phần tử toplevel đầu tiên với thẻ đã cho. Giống như getroot(). tìm (đường đi). đường dẫn là phần tử cần tìm. Trả về phần tử phù hợp đầu tiên hoặc Không có nếu không tìm thấy phần tử nào. findall(path)Tìm tất cả các phần tử cấp cao nhất với thẻ đã cho. Giống như getroot(). tìm tất cả (đường dẫn). đường dẫn là phần tử cần tìm. Trả về một danh sách hoặc chứa tất cả các phần tử phù hợp, theo thứ tự tài liệu. findtext(path [ , default ] )Tìm phần tử văn bản cho . Giống như getroot(). văn bản tìm kiếm (đường dẫn). đường dẫn là phần tử toplevel để tìm kiếm. mặc định là giá trị trả về nếu không tìm thấy phần tử. Trả về nội dung văn bản của phần tử khớp đầu tiên hoặc giá trị mặc định không tìm thấy phần tử nào. Lưu ý rằng nếu tìm thấy phần tử nhưng không có nội dung văn bản, phương thức này sẽ trả về một chuỗi rỗng. getiterator( [ tag ] )Tạo và trả về một trình lặp cây cho . 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ử) getroot() Trả về phần tử gốc của cây này. parse(source [ , parser ] )Tải phần XML bên ngoài vào . nguồn là tên tệp hoặc đối tượng tệp. 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 XMLTreeBuilder tiêu chuẩn được sử dụng. Trả về phần tử gốc của phần. write(file [ , encoding ] )Ghi cây phần tử vào một . tệp là tên tệp hoặc đối tượng tệp được mở để ghi. mã hóa là mã hóa đầu ra (mặc định là US-ASCII).

Đây là tệp XML sẽ được thao tác

<html>
    <head>
        <title>Example page</title>
    </head>
    <body>
        <p>Moved to <a href="http://example.org/">example.org</a>
        or <a href="http://example.com/">example.com</a>.</p>
    </body>
</html>

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

>>> from xml.etree.ElementTree import ElementTree
>>> tree = ElementTree()
>>> tree.parse("index.xhtml")
<Element html at b7d3f1ec>
>>> p = tree.find("body/p")     # Finds first occurrence of tag p in body
>>> p
<Element p at 8416e0c>
>>> links = p.getiterator("a")  # Returns list of all links
>>> links
[<Element a at b7d4f9ec>, <Element a at b7d4fb0c>]
>>> for i in links:             # Iterates through all found links
..     i.attrib["target"] = "blank"
>>> tree.write("output.xhtml")

QName đối tượng

lớp xml. cây etree. Yếu TốCây. QName(text_or_uri [ , tag ] ) 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.

TreeBuilder đối tượng

lớp xml. cây etree. Yếu TốCây. TreeBuilder( [ element_factory ] )

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 được gọi để tạo các phiên bản Element mới khi được cung cấp

close() Xóa bộ đệm trình phân tích cú pháp và trả về phần tử tài liệu cấp cao nhất. Trả về một thể hiện Phần tử. data(data)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 đối tượng chỉ có ASCII hoặc một đối tượng. end(tag)Đóng phần tử hiện tại. thẻ là tên phần tử. Trả về phần tử đã đóng. start(tag, attrs)Mở 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ở

Đối tượng XMLTreeBuilder

lớp xml. cây etree. Yếu TốCây. XMLTreeBuilder( [ html ][, target])

Trình tạo cấu trúc phần tử cho dữ liệu nguồn XML, dựa trên trình phân tích cú pháp người nước ngoài. html là các thực thể HTML được xác định trước. Cờ này không được hỗ trợ bởi triển khai hiện tại. mục tiêu là đối tượng mục tiêu. Nếu bị bỏ qua, trình xây dựng sử dụng một thể hiện của lớp TreeBuilder tiêu chuẩn

Làm cách nào để trích xuất dữ liệu XML trong Python?

Cách thức hoạt động của điều này là chúng tôi. .
Tải tài liệu XML của chúng ta vào bộ nhớ và xây dựng một đối tượng XML ElementTree
Sau đó, chúng tôi sử dụng phương thức find, chuyển vào bộ chọn XPath, cho phép chúng tôi chỉ định phần tử nào chúng tôi đang cố trích xuất
Nếu không tìm thấy phần tử, trả về Không có

Cây phần tử trong Python là gì?

ElementTree là một thư viện Python quan trọng cho phép bạn phân tích cú pháp và điều hướng một tài liệu XML . Sử dụng ElementTree chia nhỏ tài liệu XML theo cấu trúc cây dễ làm việc với.

Làm cách nào để in tệp XML bằng Python?

Bạn có một vài lựa chọn. .
xml. cây etree. Yếu TốCây. thụt lề()
ĐẹpSúp. làm đẹp()
lxml. cây etree. phân tích cú pháp ()
xml. nhà thờ. thiểu số. phân tích cú pháp ()

Làm cách nào để làm việc với các tệp XML trong Python?

Để đọc một tệp XML bằng ElementTree, trước tiên, chúng tôi nhập lớp ElementTree được tìm thấy bên trong thư viện xml, dưới tên ET (quy ước chung). Sau đó chuyển tên tệp của tệp xml tới ElementTree. parse(), để cho phép phân tích cú pháp tệp xml của chúng tôi. Sau đó, lấy gốc (thẻ cha) của tệp xml của chúng tôi bằng getroot()