Cách tốt nhất để phân tích cú pháp XML bằng Python là gì?

gỡ rối là một thư viện đơn giản lấy một tài liệu XML và trả về một đối tượng Python phản ánh các nút và thuộc tính trong cấu trúc của nó

Ví dụ: một tệp XML như thế này



    

có thể được tải như thế này

import untangle
obj = untangle.parse['path/to/file.xml']

và sau đó bạn có thể lấy thuộc tính tên của phần tử con như thế này

obj.root.child['name']

gỡ rối cũng hỗ trợ tải XML từ một chuỗi hoặc một URL

xmltodict¶

xmltodict là một thư viện đơn giản khác nhằm làm cho XML có cảm giác như đang làm việc với JSON

Một tệp XML như thế này


  
    elements
    more elements
  
  
    element as well
  

có thể được tải vào một lệnh Python như thế này

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]

và sau đó bạn có thể truy cập các phần tử, thuộc tính và giá trị như thế này

doc['mydocument']['@has'] # == u'an attribute'
doc['mydocument']['and']['many'] # == [u'elements', u'more elements']
doc['mydocument']['plus']['@a'] # == u'complex'
doc['mydocument']['plus']['#text'] # == u'element as well'

xmltodict cũng cho phép bạn quay lại XML bằng hàm unparse, có chế độ phát trực tuyến phù hợp để xử lý các tệp không vừa trong bộ nhớ và hỗ trợ không gian tên XML

lược đồ xml¶

xmlschema cung cấp hỗ trợ cho việc sử dụng XSD-Schemas trong Python. Không giống như các thư viện XML khác, có sẵn phân tích kiểu tự động, vì vậy f. e. nếu lược đồ xác định một phần tử thuộc loại

obj.root.child['name']
89, thì
obj.root.child['name']
90 được phân tích cú pháp cũng sẽ chứa một giá trị
obj.root.child['name']
89 cho phần tử đó. Ngoài ra, thư viện hỗ trợ xác thực tự động và rõ ràng các tài liệu XML dựa trên lược đồ

Đây là một hướng dẫn ngắn để sử dụng

>>> root.tag
'data'
>>> root.attrib
{}
2 [viết tắt là ____67]. 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

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.tag
'data'
>>> root.attrib
{}
7 có hai lớp cho mục đích này -
>>> root.tag
'data'
>>> root.attrib
{}
9 đại diện cho toàn bộ tài liệu XML dưới dạng cây và
import untangle
obj = untangle.parse['path/to/file.xml']
00 đại diện cho một nút trong cây này. 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 độ
>>> root.tag
'data'
>>> root.attrib
{}
9. Các tương tác với một phần tử XML đơn lẻ và các phần tử con của nó được thực hiện ở cấp độ
import untangle
obj = untangle.parse['path/to/file.xml']
00

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

import untangle
obj = untangle.parse['path/to/file.xml']
3

Chúng tôi có thể nhập dữ liệu này bằng cách đọc từ một tệp

import untangle
obj = untangle.parse['path/to/file.xml']
4

Hoặc trực tiếp từ một chuỗi

import untangle
obj = untangle.parse['path/to/file.xml']
5

import untangle
obj = untangle.parse['path/to/file.xml']
03 phân tích cú pháp XML từ một chuỗi trực tiếp thành một
import untangle
obj = untangle.parse['path/to/file.xml']
00, 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
>>> root.tag
'data'
>>> root.attrib
{}
9. Kiểm tra tài liệu để chắc chắn

Là một

import untangle
obj = untangle.parse['path/to/file.xml']
00,
import untangle
obj = untangle.parse['path/to/file.xml']
07 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

import untangle
obj = untangle.parse['path/to/file.xml']
0

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

obj.root.child['name']
3

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

import untangle
obj = untangle.parse['path/to/file.xml']
08 tùy chỉnh tới hàm tạo
import untangle
obj = untangle.parse['path/to/file.xml']
09

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

import untangle
obj = untangle.parse['path/to/file.xml']
09 và cung cấp dữ liệu vào nó dần dần, 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
import untangle
obj = untangle.parse['path/to/file.xml']
00 được xây dựng đầy đủ

Công cụ mạnh mẽ nhất để làm điều này là

obj.root.child['name']
32. 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 với các lệnh gọi
obj.root.child['name']
33. Để lấy các phần tử XML được phân tích cú pháp, hãy gọi
obj.root.child['name']
34. Đây là một ví dụ


  
    elements
    more elements
  
  
    element as well
  

1

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, nên

obj.root.child['name']
32 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
obj.root.child['name']
36. 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ớ

Tìm các yếu tố thú vị¶

import untangle
obj = untangle.parse['path/to/file.xml']
00 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ụ,
obj.root.child['name']
38


  
    elements
    more elements
  
  
    element as well
  

6

obj.root.child['name']
39 chỉ tìm thấy 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.

  
    elements
    more elements
  
  
    element as well
  

10 tìm phần tử con đầu tiên với một thẻ cụ thể và

  
    elements
    more elements
  
  
    element as well
  

11 truy cập nội dung văn bản của phần tử.

  
    elements
    more elements
  
  
    element as well
  

12 truy cập các thuộc tính của phần tử

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
1

Có thể xác định cụ thể hơn các phần tử cần tìm bằng cách sử dụng XPath .

Sửa đổi tệp XML¶

>>> root.tag
'data'
>>> root.attrib
{}
9 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

  
    elements
    more elements
  
  
    element as well
  

14 phục vụ mục đích này

Sau khi được tạo, một đối tượng

import untangle
obj = untangle.parse['path/to/file.xml']
00 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ư

  
    elements
    more elements
  
  
    element as well
  

11], thêm và sửa đổi các thuộc tính [phương thức

  
    elements
    more elements
  
  
    element as well
  

17], cũng như thêm các phần tử con mới [ví dụ như với

  
    elements
    more elements
  
  
    element as well
  

18]

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


  
    elements
    more elements
  
  
    element as well
  

19 vào thành phần thứ hạng

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
9

XML của chúng tôi bây giờ trông như thế này

import untangle
obj = untangle.parse['path/to/file.xml']
40

Chúng tôi có thể xóa các phần tử bằng cách sử dụng


  
    elements
    more elements
  
  
    element as well
  

60. 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 untangle
obj = untangle.parse['path/to/file.xml']
41

Lưu ý rằng việc sửa đổi đồng thời trong khi lặp lại có thể dẫn đến các sự cố, giống như khi lặp lại và sửa đổi các danh sách hoặc ký tự Python. Do đó, ví dụ đầu tiên thu thập tất cả các phần tử phù hợp với


  
    elements
    more elements
  
  
    element as well
  

61 và chỉ sau đó lặp lại danh sách các kết quả phù hợp

XML của chúng tôi bây giờ trông như thế này

import untangle
obj = untangle.parse['path/to/file.xml']
42

Xây dựng tài liệu XML¶

Hàm


  
    elements
    more elements
  
  
    element as well
  

62 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 untangle
obj = untangle.parse['path/to/file.xml']
43

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


  
    elements
    more elements
  
  
    element as well
  

63 được mở rộng thành

  
    elements
    more elements
  
  
    element as well
  

64 trong đó tiền tố được thay thế bằng URI đầy đủ. Ngoài ra, nếu có một không gian tên mặc định, 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 untangle
obj = untangle.parse['path/to/file.xml']
44

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


  
    elements
    more elements
  
  
    element as well
  

65 hoặc

  
    elements
    more elements
  
  
    element as well
  

66

import untangle
obj = untangle.parse['path/to/file.xml']
45

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 untangle
obj = untangle.parse['path/to/file.xml']
46

Hai cách tiếp cận này đều xuất ra

import untangle
obj = untangle.parse['path/to/file.xml']
47

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;

Thí dụ¶

Đây là 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


  
    elements
    more elements
  
  
    element as well
  

67 từ phần Phân tích cú pháp XML .

import untangle
obj = untangle.parse['path/to/file.xml']
48

Đối với XML có không gian tên, hãy sử dụng ký hiệu


  
    elements
    more elements
  
  
    element as well
  

68 đủ điều kiện thông thường

import untangle
obj = untangle.parse['path/to/file.xml']
49

Cú pháp XPath được hỗ trợ¶

cú pháp

Nghĩa


  
    elements
    more elements
  
  
    element as well
  

69

Chọn tất cả các phần tử con với thẻ đã cho. Ví dụ,

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
10 chọn tất cả các phần tử con có tên là
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
10, và
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
12 chọn tất cả các cháu có tên là
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
13 trong tất cả các phần tử con có tên là
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
10.
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
15 chọn tất cả các thẻ trong không gian tên đã cho,
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
16 chọn các thẻ có tên
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
10 trong bất kỳ [hoặc không] không gian tên nào và
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
18 chỉ chọn các thẻ không có trong không gian tên

Đã thay đổi trong phiên bản 3. 8. Đã thêm hỗ trợ ký tự đại diện dấu sao.

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
19

Chọn tất cả các phần tử con, bao gồm nhận xét và hướng dẫn xử lý. Ví dụ,

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
90 chọn tất cả các cháu có tên là
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
13

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
92

Chọ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

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
93

Chọ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ụ:

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
94 chọn tất cả các phần tử
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
13 trong toàn bộ cây

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
96

Chọn phần tử cha. Trả về

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97 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ử
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
98 được gọi]

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
99

Chọn tất cả các phần tử có thuộc tính đã cho

import untangle
obj = untangle.parse['path/to/file.xml']
400

Chọ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

import untangle
obj = untangle.parse['path/to/file.xml']
401

Chọn tất cả các phần tử mà thuộc tính đã cho không có giá trị đã cho. Giá trị không thể chứa dấu ngoặc kép

Mới trong phiên bản 3. 10

import untangle
obj = untangle.parse['path/to/file.xml']
402

Chọn tất cả các phần tử có tên con là


  
    elements
    more elements
  
  
    element as well
  

69. Chỉ những đứa trẻ ngay lập tức được hỗ trợ

import untangle
obj = untangle.parse['path/to/file.xml']
404

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

import untangle
obj = untangle.parse['path/to/file.xml']
405 đã cho

Mới trong phiên bản 3. 7

import untangle
obj = untangle.parse['path/to/file.xml']
406

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, không bằng với

import untangle
obj = untangle.parse['path/to/file.xml']
405 đã cho

Mới trong phiên bản 3. 10

import untangle
obj = untangle.parse['path/to/file.xml']
408

Chọn tất cả các phần tử có tên con là


  
    elements
    more elements
  
  
    element as well
  

69 có nội dung văn bản hoàn chỉnh, bao gồm cả phần tử con, bằng với
import untangle
obj = untangle.parse['path/to/file.xml']
405 đã cho

import untangle
obj = untangle.parse['path/to/file.xml']
411

Chọn tất cả các phần tử có con tên là


  
    elements
    more elements
  
  
    element as well
  

69 có nội dung văn bản hoàn chỉnh, bao gồm cả con cháu, không bằng với
import untangle
obj = untangle.parse['path/to/file.xml']
405 đã cho

Mới trong phiên bản 3. 10

import untangle
obj = untangle.parse['path/to/file.xml']
414

Chọ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

import untangle
obj = untangle.parse['path/to/file.xml']
415 [đố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.
import untangle
obj = untangle.parse['path/to/file.xml']
416]

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.

import untangle
obj = untangle.parse['path/to/file.xml']
417 vị ngữ phải được đặt trước tên thẻ

Thẩm quyền giải quyết¶

Chức năng¶

xml. cây etree. Yếu TốCây. chuẩn hóa[xml_data=Không, *, out=None, from_file=None, **options]

C14N 2. 0 chức năng chuyển đổi

Canonicalization là một cách để chuẩn hóa đầu ra XML theo cách cho phép so sánh từng byte và chữ ký số. Nó làm giảm sự tự do mà các trình tuần tự hóa XML có và thay vào đó tạo ra một biểu diễn XML bị ràng buộc hơn. Các hạn chế chính liên quan đến vị trí khai báo không gian tên, thứ tự các thuộc tính và khoảng trắng có thể bỏ qua

Hàm này lấy một chuỗi dữ liệu XML [xml_data] hoặc một đường dẫn tệp hoặc đối tượng giống như tệp [from_file] làm đầu vào, chuyển đổi nó thành dạng chính tắc và viết nó ra bằng cách sử dụng đối tượng out file[-like], nếu được cung cấp, hoặc . Tệp đầu ra nhận văn bản, không phải byte. Do đó, nó nên được mở ở chế độ văn bản với mã hóa

import untangle
obj = untangle.parse['path/to/file.xml']
418

sử dụng điển hình

import untangle
obj = untangle.parse['path/to/file.xml']
50

Các tùy chọn cấu hình như sau

  • với nhận xét. đặt thành true để bao gồm nhận xét [mặc định. sai]

  • dải_text. đặt thành true để loại bỏ khoảng trắng trước và sau nội dung văn bản

    [vỡ nợ. sai]

  • viết lại_prefixes. đặt thành true để thay thế các tiền tố không gian tên bằng “n{number}”

    [vỡ nợ. sai]

  • qname_aware_tags. một tập hợp các tên thẻ nhận biết qname trong đó các tiền tố

    nên được thay thế trong nội dung văn bản [mặc định. trống rỗng]

  • qname_aware_attrs. một tập hợp các tên thuộc tính nhận biết qname trong đó các tiền tố

    nên được thay thế trong nội dung văn bản [mặc định. trống rỗng]

  • loại trừ_attrs. một tập hợp các tên thuộc tính không được đánh số thứ tự

  • loại trừ_tags. một tập hợp các tên thẻ không được đánh số thứ tự

Trong danh sách tùy chọn ở trên, “một tập hợp” đề cập đến bất kỳ bộ sưu tập hoặc chuỗi lặp nào, không có thứ tự nào được mong đợi

Mới trong phiên bản 3. 8

xml. cây etree. Yếu TốCây. Nhận xét[văn bản=Không có]

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

import untangle
obj = untangle.parse['path/to/file.xml']
09 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. Một
>>> root.tag
'data'
>>> root.attrib
{}
9 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 của
import untangle
obj = untangle.parse['path/to/file.xml']
00

xml. cây etree. Yếu TốCây. kết xuất[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ẻ

Đã thay đổi trong phiên bản 3. 8. Hàm

import untangle
obj = untangle.parse['path/to/file.xml']
422 hiện giữ nguyên thứ tự thuộc tính do người dùng chỉ định.

xml. cây etree. Yếu TốCây. từchuỗi[văn bản , trình phân tích cú pháp=None]

Phân tích cú pháp một phần XML từ một hằng chuỗi. Tương tự như

import untangle
obj = untangle.parse['path/to/file.xml']
423. 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
import untangle
obj = untangle.parse['path/to/file.xml']
09 tiêu chuẩn được sử dụng. Trả về một phiên bản
import untangle
obj = untangle.parse['path/to/file.xml']
00

xml. cây etree. Yếu TốCây. từdanh sách chuỗi[trình tự , trình phân tích cú pháp=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

import untangle
obj = untangle.parse['path/to/file.xml']
09 tiêu chuẩn được sử dụng. Trả về một phiên bản
import untangle
obj = untangle.parse['path/to/file.xml']
00

Mới trong phiên bản 3. 2

xml. cây etree. Yếu TốCây. thụt lề[cây , dấu cách='  ', level=0]

Nối khoảng trắng vào cây con để thụt vào cây một cách trực quan. Điều này có thể được sử dụng để tạo đầu ra XML được in đẹp. cây có thể là Element hoặc ElementTree. khoảng trắng là chuỗi khoảng trắng sẽ được chèn cho mỗi mức thụt đầu dòng, hai ký tự khoảng trắng theo mặc định. Để thụt lề một phần cây con bên trong cây đã được thụt lề, chuyển mức thụt đầu dòng ban đầu thành mức

Mới trong phiên bản 3. 9

xml. cây etree. Yếu TốCây. phần tử[phần tử]

Kiểm tra xem một đối tượng có phải là đối tượng phần tử hợp lệ không. phần tử là một thể hiện phần tử. Trả lại

import untangle
obj = untangle.parse['path/to/file.xml']
428 nếu đây là đối tượng phần tử

xml. cây etree. Yếu TốCây. iterparse[nguồn , sự kiện=None, parser=None]

Phân tích cú pháp một phần XML thành một cây phần tử tăng dần 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 đối tượng tệp 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 untangle
obj = untangle.parse['path/to/file.xml']
429,
import untangle
obj = untangle.parse['path/to/file.xml']
430,
import untangle
obj = untangle.parse['path/to/file.xml']
431,
import untangle
obj = untangle.parse['path/to/file.xml']
432,
import untangle
obj = untangle.parse['path/to/file.xml']
433 và
import untangle
obj = untangle.parse['path/to/file.xml']
434 [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 untangle
obj = untangle.parse['path/to/file.xml']
430 đượ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
import untangle
obj = untangle.parse['path/to/file.xml']
09 tiêu chuẩn được sử dụng. trình phân tích cú pháp phải là lớp con của
import untangle
obj = untangle.parse['path/to/file.xml']
09 và chỉ có thể sử dụng
import untangle
obj = untangle.parse['path/to/file.xml']
08 mặc định làm mục tiêu. Trả về một iterator cung cấp các cặp
import untangle
obj = untangle.parse['path/to/file.xml']
439.

Lưu ý rằng trong khi

obj.root.child['name']
36 xây dựng cây dần 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
obj.root.child['name']
32

Ghi chú

obj.root.child['name']
36 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.

Đã thay đổi trong phiên bản 3. 8. Các sự kiện

import untangle
obj = untangle.parse['path/to/file.xml']
443 và
import untangle
obj = untangle.parse['path/to/file.xml']
444 đã được thêm vào.

xml. cây etree. Yếu TốCây. phân tích cú pháp[nguồn , trình phân tích cú pháp=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

import untangle
obj = untangle.parse['path/to/file.xml']
09 tiêu chuẩn được sử dụng. Trả về một phiên bản
>>> root.tag
'data'
>>> root.attrib
{}
9

xml. cây etree. Yếu TốCây. Hướng dẫn xử lý[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

import untangle
obj = untangle.parse['path/to/file.xml']
09 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. Một
>>> root.tag
'data'
>>> root.attrib
{}
9 sẽ chỉ chứa các nút hướng dẫn xử lý nếu chúng đã được chèn vào cây bằng một trong các phương thức của
import untangle
obj = untangle.parse['path/to/file.xml']
00

xml. cây etree. Yếu TốCây. register_namespace[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

xml. cây etree. Yếu TốCây. Thành phần con[cha mẹ , thẻ, attrib={}, **extra]

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ử

xml. cây etree. Yếu TốCây. chuỗi[phần tử , mã hóa='us-ascii', method='xml', *, xml_declaration=None, default_namespace=None, 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 của

import untangle
obj = untangle.parse['path/to/file.xml']
00. mã hóa 1 là mã hóa đầu ra [mặc định là US-ASCII]. Sử dụng
import untangle
obj = untangle.parse['path/to/file.xml']
451 để tạo chuỗi Unicode [nếu không, chuỗi phụ sẽ được tạo]. phương thức là
import untangle
obj = untangle.parse['path/to/file.xml']
452,
import untangle
obj = untangle.parse['path/to/file.xml']
453 hoặc
import untangle
obj = untangle.parse['path/to/file.xml']
454 [mặc định là
import untangle
obj = untangle.parse['path/to/file.xml']
452]. xml_declaration, default_namespace và short_empty_elements có cùng ý nghĩa như trong

  
    elements
    more elements
  
  
    element as well
  

14. 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.

Mới trong phiên bản 3. 8. Các tham số xml_declaration và default_namespace.

Đã thay đổi trong phiên bản 3. 8. Hàm

import untangle
obj = untangle.parse['path/to/file.xml']
457 hiện giữ nguyên thứ tự thuộc tính do người dùng chỉ định.

xml. cây etree. Yếu TốCây. tostringlist[phần tử , mã hóa='us-ascii', method='xml', *, xml_declaration=None, default_namespace=None, 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 của

import untangle
obj = untangle.parse['path/to/file.xml']
00. mã hóa 1 là mã hóa đầu ra [mặc định là US-ASCII]. Sử dụng
import untangle
obj = untangle.parse['path/to/file.xml']
451 để tạo chuỗi Unicode [nếu không, chuỗi phụ sẽ được tạo]. phương thức là
import untangle
obj = untangle.parse['path/to/file.xml']
452,
import untangle
obj = untangle.parse['path/to/file.xml']
453 hoặc
import untangle
obj = untangle.parse['path/to/file.xml']
454 [mặc định là
import untangle
obj = untangle.parse['path/to/file.xml']
452]. xml_declaration, default_namespace và short_empty_elements có cùng ý nghĩa như trong

  
    elements
    more elements
  
  
    element as well
  

14. 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 untangle
obj = untangle.parse['path/to/file.xml']
465

Mới trong phiên bản 3. 2

Mới trong phiên bản 3. 4. Tham số short_empty_elements.

Mới trong phiên bản 3. 8. Các tham số xml_declaration và default_namespace.

Đã thay đổi trong phiên bản 3. 8. Hàm

import untangle
obj = untangle.parse['path/to/file.xml']
466 hiện giữ nguyên thứ tự thuộc tính do người dùng chỉ định.

xml. cây etree. Yếu TốCây. XML[văn bản , trình phân tích cú pháp=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

import untangle
obj = untangle.parse['path/to/file.xml']
09 tiêu chuẩn được sử dụng. Trả về một phiên bản
import untangle
obj = untangle.parse['path/to/file.xml']
00

xml. cây etree. Yếu TốCây. XMLID[văn bản , trình phân tích cú pháp=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

import untangle
obj = untangle.parse['path/to/file.xml']
09 tiêu chuẩn được sử dụng. Trả về một tuple chứa một thể hiện
import untangle
obj = untangle.parse['path/to/file.xml']
00 và một từ điển

XBao gồm hỗ trợ¶

Mô-đun này cung cấp hỗ trợ hạn chế cho các chỉ thị XInclude, thông qua mô-đun trợ giúp

import untangle
obj = untangle.parse['path/to/file.xml']
471. Mô-đun này có thể được sử dụng để chèn các cây con và chuỗi văn bản vào cây phần tử, dựa trên thông tin trong cây

Thí dụ¶

Đây là một ví dụ minh họa việc sử dụng mô-đun XInclude. Để đưa tài liệu XML vào tài liệu hiện tại, hãy sử dụng phần tử

import untangle
obj = untangle.parse['path/to/file.xml']
472 và đặt thuộc tính phân tích cú pháp thành
import untangle
obj = untangle.parse['path/to/file.xml']
452, đồng thời sử dụng thuộc tính href để chỉ định tài liệu cần đưa vào

import untangle
obj = untangle.parse['path/to/file.xml']
51

Theo mặc định, thuộc tính href được coi là tên tệp. Bạn có thể sử dụng trình tải tùy chỉnh để ghi đè hành vi này. Cũng lưu ý rằng trình trợ giúp tiêu chuẩn không hỗ trợ cú pháp XPulum

Để xử lý tệp này, hãy tải tệp như bình thường và chuyển phần tử gốc cho mô-đun

>>> root.tag
'data'
>>> root.attrib
{}
2

import untangle
obj = untangle.parse['path/to/file.xml']
52

Mô-đun ElementInclude thay thế phần tử

import untangle
obj = untangle.parse['path/to/file.xml']
472 bằng phần tử gốc từ nguồn. tài liệu xml. Kết quả có thể trông giống như thế này

import untangle
obj = untangle.parse['path/to/file.xml']
53

Nếu thuộc tính parse bị bỏ qua, nó sẽ mặc định là “xml”. Thuộc tính href là bắt buộc

Để bao gồm một tài liệu văn bản, hãy sử dụng phần tử

import untangle
obj = untangle.parse['path/to/file.xml']
472 và đặt thuộc tính phân tích cú pháp thành “văn bản”

import untangle
obj = untangle.parse['path/to/file.xml']
54

Kết quả có thể trông giống như

import untangle
obj = untangle.parse['path/to/file.xml']
55

Thẩm quyền giải quyết¶

Chức năng¶

xml. cây etree. Yếu tốBao gồm. default_loader[href , phân tích cú pháp, encoding=None]

Trình tải mặc định. Trình tải mặc định này đọc tài nguyên được bao gồm từ đĩa. href là một URL. phân tích cú pháp dành cho chế độ phân tích cú pháp "xml" hoặc "văn bản". mã hóa là mã hóa văn bản tùy chọn. Nếu không được cung cấp, mã hóa là

import untangle
obj = untangle.parse['path/to/file.xml']
418. Trả về tài nguyên mở rộng. Nếu chế độ phân tích cú pháp là
import untangle
obj = untangle.parse['path/to/file.xml']
452, thì đây là một phiên bản ElementTree. Nếu chế độ phân tích cú pháp là “văn bản”, thì đây là một chuỗi Unicode. Nếu trình tải không thành công, nó có thể trả về Không có hoặc đưa ra một ngoại lệ

xml. cây etree. Yếu tốBao gồm. bao gồm[elem , trình tải=None, base_url=None, max_depth=6]

Hàm này mở rộng các chỉ thị XInclude. elem là phần tử gốc. trình tải là một trình tải tài nguyên tùy chọn. Nếu bỏ qua, nó sẽ mặc định là

import untangle
obj = untangle.parse['path/to/file.xml']
479. Nếu được cung cấp, nó phải là một giao diện có thể gọi được thực hiện giống như
import untangle
obj = untangle.parse['path/to/file.xml']
479. base_url là URL cơ sở của tệp gốc, để giải quyết tương đối bao gồm các tham chiếu tệp. max_depth là số lần đưa vào đệ quy tối đa. Giới hạn để giảm nguy cơ bùng nổ nội dung độc hại. Chuyển một giá trị âm để tắt giới hạn

Trả về tài nguyên mở rộng. Nếu chế độ phân tích cú pháp là

import untangle
obj = untangle.parse['path/to/file.xml']
452, thì đây là một phiên bản ElementTree. Nếu chế độ phân tích cú pháp là “văn bản”, thì đây là một chuỗi Unicode. Nếu trình tải không thành công, nó có thể trả về Không có hoặc đưa ra một ngoại lệ

Mới trong phiên bản 3. 9. Thông số base_url và max_depth.

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

lớp xml. cây etree. Yếu TốCây. Phần tử[thẻ , thuộc tính={}, **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

thẻ

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ử]

văn bảnđuôi

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 sẽ giữ văn bản 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

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97 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 untangle
obj = untangle.parse['path/to/file.xml']
56

phần tử a có

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97 cho cả thuộc tính văn bản và đuôi, phần tử b có văn bản
import untangle
obj = untangle.parse['path/to/file.xml']
485 và đuôi
import untangle
obj = untangle.parse['path/to/file.xml']
486, phần tử c có văn bản
import untangle
obj = untangle.parse['path/to/file.xml']
487 và đuôi
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97, và phần tử d có văn bản
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97 và đuôi
import untangle
obj = untangle.parse['path/to/file.xml']
490

Để thu thập văn bản bên trong của một phần tử, hãy xem

import untangle
obj = untangle.parse['path/to/file.xml']
491, ví dụ
import untangle
obj = untangle.parse['path/to/file.xml']
492

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

thuộc tính

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ử

xóa[]

Đặ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

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97

lấy[khóa , mặc định=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

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 ý

phím[]

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 ý

đặt[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ụ]

chắp thêm[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

import untangle
obj = untangle.parse['path/to/file.xml']
494 nếu phần tử phụ không phải là
import untangle
obj = untangle.parse['path/to/file.xml']
00

mở rộng[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

import untangle
obj = untangle.parse['path/to/file.xml']
494 nếu một phần tử con không phải là một
import untangle
obj = untangle.parse['path/to/file.xml']
00

Mới trong phiên bản 3. 2

tìm[khớp , không gian tên=None]

Tìm đối sánh 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 thể hiện phần tử hoặc

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97. 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 đủ. Chuyển
import untangle
obj = untangle.parse['path/to/file.xml']
499 làm tiền tố để di chuyển tất cả các tên thẻ chưa được trộn trong biểu thức vào không gian tên đã cho.

findall[khớp , không gian tên=None]

Tìm tất cả các thành phần con phù hợp, theo tên thẻ hoặc đường dẫn . 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 đủ. Chuyển

import untangle
obj = untangle.parse['path/to/file.xml']
499 làm tiền tố để di chuyển tất cả các tên thẻ chưa được trộn trong biểu thức vào không gian tên đã cho.

tìm văn bản[khớp , mặc định=None, namespaces=None]

Tìm văn bản cho 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ề 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 trố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 đủ. Chuyển

import untangle
obj = untangle.parse['path/to/file.xml']
499 làm tiền tố để di chuyển tất cả các tên thẻ chưa được trộn trong biểu thức vào không gian tên đã cho.

insert[index , phần tử con]

Chèn phần tử con vào vị trí đã cho trong phần tử này. Tăng

import untangle
obj = untangle.parse['path/to/file.xml']
494 nếu phần tử phụ không phải là
import untangle
obj = untangle.parse['path/to/file.xml']
00

iter[thẻ=Không có]

Tạo cây trình lặp với phần tử hiện tại làm 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à

import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97 hoặc
import untangle
obj = untangle.parse['path/to/file.xml']
505, 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

iterfind[khớp , không gian tên=None]

Tìm tất cả các thành phần con phù hợp, theo 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. 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

itertext[]

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

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 chức năng của nhà máy


  
    elements
    more elements
  
  
    element as well
  

62

xóa[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

import untangle
obj = untangle.parse['path/to/file.xml']
00 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.
import untangle
obj = untangle.parse['path/to/file.xml']
508,
import untangle
obj = untangle.parse['path/to/file.xml']
509,
import untangle
obj = untangle.parse['path/to/file.xml']
510,
import untangle
obj = untangle.parse['path/to/file.xml']
511

thận trọng. Các phần tử không có phần tử phụ sẽ kiểm tra là

import untangle
obj = untangle.parse['path/to/file.xml']
512. 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
import untangle
obj = untangle.parse['path/to/file.xml']
513 hoặc
import untangle
obj = untangle.parse['path/to/file.xml']
514 cụ thể

import untangle
obj = untangle.parse['path/to/file.xml']
57

Trước Python 3. 8, thứ tự tuần tự hóa của các thuộc tính XML của các phần tử được dự đoán một cách giả tạo bằng cách sắp xếp các thuộc tính theo tên của chúng. Dựa trên thứ tự các ký tự hiện được đảm bảo, việc sắp xếp lại tùy ý này đã bị xóa trong Python 3. 8 để duy trì thứ tự các thuộc tính ban đầu được phân tích cú pháp hoặc tạo bởi mã người dùng

Nói chung, mã người dùng nên cố gắng không phụ thuộc vào thứ tự cụ thể của các thuộc tính, với điều kiện là Tập thông tin XML loại trừ rõ ràng thứ tự thuộc tính khỏi việc truyền tải thông tin. Mã nên được chuẩn bị để đối phó với bất kỳ thứ tự nào trên đầu vào. Trong trường hợp đầu ra XML xác định được yêu cầu, e. g. đối với các tập dữ liệu kiểm tra hoặc ký mật mã, có sẵn tuần tự hóa chuẩn với hàm

import untangle
obj = untangle.parse['path/to/file.xml']
515

Trong trường hợp đầu ra chuẩn không áp dụng được nhưng thứ tự thuộc tính cụ thể vẫn được mong muốn trên đầu ra, mã nên nhằm mục đích tạo các thuộc tính trực tiếp theo thứ tự mong muốn, để tránh sự không phù hợp về nhận thức cho người đọc mã. Trong trường hợp khó đạt được điều này, có thể áp dụng một công thức như sau trước khi lập số sê-ri để thực thi một đơn đặt hàng độc lập với việc tạo Phần tử

import untangle
obj = untangle.parse['path/to/file.xml']
58

Đối tượng ElementTree¶

lớp xml. cây etree. Yếu TốCây. ElementTree[element=Không có, 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

_setroot[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ử

tìm[khớp , không gian tên=None]

Tương tự như


  
    elements
    more elements
  
  
    element as well
  

10, bắt đầu từ gốc cây

findall[khớp , không gian tên=None]

Tương tự như

obj.root.child['name']
39, bắt đầu từ gốc cây

tìm văn bản[khớp , mặc định=None, namespaces=None]

Giống như

import untangle
obj = untangle.parse['path/to/file.xml']
518, bắt đầu từ gốc cây

getroot[]

Trả về phần tử gốc cho cây này

iter[thẻ=Không có]

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ử]

iterfind[khớp , không gian tên=None]

Giống như

import untangle
obj = untangle.parse['path/to/file.xml']
519, bắt đầu từ gốc cây

Mới trong phiên bản 3. 2

phân tích cú pháp[nguồn , trình phân tích cú pháp=None]

Tải phần XML bên ngoài vào cây phần tử này. 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

import untangle
obj = untangle.parse['path/to/file.xml']
09 tiêu chuẩn được sử dụng. Trả về phần tử gốc của phần.

ghi[tệp , mã hóa='us-ascii', xml_declaration=None, default_namespace=None, method='xml', *, short_empty_elements=True]

Ghi cây phần tử vào tệp, dưới dạng XML. tệp là tên tệp hoặc đối tượng tệp được mở để ghi. mã hóa 1 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

import untangle
obj = untangle.parse['path/to/file.xml']
512 cho trường hợp không bao giờ,
import untangle
obj = untangle.parse['path/to/file.xml']
428 cho trường hợp luôn luôn, chỉ sử dụng
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97 nếu không phải là US-ASCII hoặc UTF-8 hoặc Unicode [mặc định là
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97]. default_namespace đặt không gian tên XML mặc định [cho “xmlns”]. phương thức là
import untangle
obj = untangle.parse['path/to/file.xml']
452,
import untangle
obj = untangle.parse['path/to/file.xml']
453 hoặc
import untangle
obj = untangle.parse['path/to/file.xml']
454 [mặc định là
import untangle
obj = untangle.parse['path/to/file.xml']
452]. 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
import untangle
obj = untangle.parse['path/to/file.xml']
428 [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 [

import untangle
obj = untangle.parse['path/to/file.xml']
530] hoặc nhị phân [
import untangle
obj = untangle.parse['path/to/file.xml']
531]. Điều này được kiểm soát bởi đối số mã hóa. Nếu mã hóa là
import untangle
obj = untangle.parse['path/to/file.xml']
532, đầ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à một đối tượng tệp đang mở; .

Mới trong phiên bản 3. 4. Tham số short_empty_elements.

Đã thay đổi trong phiên bản 3. 8. Phương thức

import untangle
obj = untangle.parse['path/to/file.xml']
533 hiện giữ nguyên thứ tự thuộc tính do người dùng chỉ định.

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

import untangle
obj = untangle.parse['path/to/file.xml']
59

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.tag
'data'
>>> root.attrib
{}
0

QName Đối tượng¶

lớp xml. cây etree. Yếu TốCây. QName[text_or_uri , thẻ=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ộ. Các trường hợp

import untangle
obj = untangle.parse['path/to/file.xml']
534 không rõ ràng

Đối tượng TreeBuilder¶

lớp xml. cây etree. Yếu TốCây. TreeBuilder[element_factory=Không có, *, comment_factory=None, pi_factory=None, insert_comments=False, insert_pis=False]

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, kết thúc, nhận xét và pi thành 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

Các hàm comment_factory và pi_factory, khi được cung cấp, sẽ hoạt động giống như các hàm

import untangle
obj = untangle.parse['path/to/file.xml']
535 và
import untangle
obj = untangle.parse['path/to/file.xml']
536 để tạo nhận xét và hướng dẫn xử lý. Khi không được cung cấp, các nhà máy mặc định sẽ được sử dụng. Khi insert_comments và/hoặc insert_pis là true, comment/pis sẽ được chèn vào cây nếu chúng xuất hiện bên trong phần tử gốc [nhưng không xuất hiện bên ngoài nó]

đóng[]

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 phiên bản

import untangle
obj = untangle.parse['path/to/file.xml']
00

dữ liệu[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

kết thúc[thẻ]

Đóng phần tử hiện tại. thẻ là tên phần tử. Trả về phần tử đã đóng

bắt đầu[thẻ , 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ở

bình luận[văn bản]

Tạo một bình luận với văn bản đã cho. Nếu

import untangle
obj = untangle.parse['path/to/file.xml']
538 là đúng, điều này cũng sẽ thêm nó vào cây

Mới trong phiên bản 3. 8

pi[mục tiêu , văn bản]

Tạo một bình luận với tên mục tiêu và văn bản đã cho. Nếu

import untangle
obj = untangle.parse['path/to/file.xml']
539 là đúng, điều này cũng sẽ thêm nó vào cây

Mới trong phiên bản 3. 8

Ngoài ra, một đối tượng

import untangle
obj = untangle.parse['path/to/file.xml']
08 tùy chỉnh có thể cung cấp các phương thức sau

loại tài liệu[tên , xuất bản, system]

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

import untangle
obj = untangle.parse['path/to/file.xml']
08 mặc định

Mới trong phiên bản 3. 2

start_ns[tiền tố , uri]

Được gọi bất cứ khi nào trình phân tích cú pháp gặp một khai báo vùng tên mới, trước lệnh gọi lại

import untangle
obj = untangle.parse['path/to/file.xml']
542 cho phần tử mở xác định nó. tiền tố là
import untangle
obj = untangle.parse['path/to/file.xml']
499 cho không gian tên mặc định và tên tiền tố không gian tên được khai báo nếu không. uri là URI không gian tên

Mới trong phiên bản 3. 8

end_ns[tiền tố]

Được gọi sau cuộc gọi lại

import untangle
obj = untangle.parse['path/to/file.xml']
544 của một phần tử đã khai báo ánh xạ tiền tố không gian tên, với tên của tiền tố nằm ngoài phạm vi

Mới trong phiên bản 3. 8

lớp xml. cây etree. Yếu TốCây. C14NWriterTarget[viết , *, with_comments=False, strip_text=False, rewrite_prefixes=False, qname_aware_tags=None, qname_aware_attrs=None, exclude_attrs=None, exclude_tags=None]

MỘT C14N 2. 0 nhà văn. Các đối số giống như đối với hàm

import untangle
obj = untangle.parse['path/to/file.xml']
515. Lớp này không xây dựng cây mà dịch trực tiếp các sự kiện gọi lại thành dạng tuần tự hóa bằng cách sử dụng hàm ghi

Mới trong phiên bản 3. 8

Đối tượng XMLParser¶

lớp xml. cây etree. Yếu TốCây. XMLParser[* , mục tiêu=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

import untangle
obj = untangle.parse['path/to/file.xml']
546 để 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 pháp
import untangle
obj = untangle.parse['path/to/file.xml']
547 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 lệnh gọi lại trên đối tượng đích. Nếu mục tiêu bị bỏ qua, thì tiêu chuẩn
import untangle
obj = untangle.parse['path/to/file.xml']
08 được sử dụng. Nếu mã hóa 1 được cung cấp, giá trị sẽ ghi đè mã hóa được chỉ định trong tệp XML

Đã thay đổi trong phiên bản 3. 8. Các tham số hiện tại chỉ từ khóa . Đối số html không còn được hỗ trợ.

đóng[]

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

import untangle
obj = untangle.parse['path/to/file.xml']
549 của mục tiêu được truyền trong quá trình xây dựng;

nguồn cấp dữ liệu[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

import untangle
obj = untangle.parse['path/to/file.xml']
550 gọi phương thức
import untangle
obj = untangle.parse['path/to/file.xml']
551 của mục tiêu cho mỗi thẻ mở, phương thức
import untangle
obj = untangle.parse['path/to/file.xml']
552 của nó cho mỗi thẻ đóng và dữ liệu được xử lý theo phương thức
import untangle
obj = untangle.parse['path/to/file.xml']
553. Để biết thêm các phương thức gọi lại được hỗ trợ, hãy xem lớp
import untangle
obj = untangle.parse['path/to/file.xml']
08.
import untangle
obj = untangle.parse['path/to/file.xml']
555 gọi phương thức của mục tiêu
import untangle
obj = untangle.parse['path/to/file.xml']
549.
import untangle
obj = untangle.parse['path/to/file.xml']
09 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.tag
'data'
>>> root.attrib
{}
1

Đối tượng XMLPullParser¶

lớp xml. cây etree. Yếu TốCây. XMLPullParser[sự kiện=Không có]

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

import untangle
obj = untangle.parse['path/to/file.xml']
09, nhưng thay vì đẩy lệnh gọi đến mục tiêu gọi lại,
obj.root.child['name']
32 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 untangle
obj = untangle.parse['path/to/file.xml']
429,
import untangle
obj = untangle.parse['path/to/file.xml']
430,
import untangle
obj = untangle.parse['path/to/file.xml']
431,
import untangle
obj = untangle.parse['path/to/file.xml']
432,
import untangle
obj = untangle.parse['path/to/file.xml']
433 và
import untangle
obj = untangle.parse['path/to/file.xml']
434 [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 untangle
obj = untangle.parse['path/to/file.xml']
430 được báo cáo

nguồn cấp dữ liệu[dữ liệu]

Cung cấp dữ liệu byte đã cho cho trình phân tích cú pháp

đóng[]

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ư

import untangle
obj = untangle.parse['path/to/file.xml']
555, phương thức này luôn trả về
import xmltodict

with open['path/to/file.xml'] as fd:
    doc = xmltodict.parse[fd.read[]]
97. 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
import untangle
obj = untangle.parse['path/to/file.xml']
569

read_events[]

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 untangle
obj = untangle.parse['path/to/file.xml']
439, trong đó sự kiện là một chuỗi đại diện cho loại sự kiện [e. g.
import untangle
obj = untangle.parse['path/to/file.xml']
430] và elem là đối tượng
import untangle
obj = untangle.parse['path/to/file.xml']
00 gặp phải hoặc giá trị ngữ cảnh khác như sau

  • import untangle
    obj = untangle.parse['path/to/file.xml']
    
    573,
    import untangle
    obj = untangle.parse['path/to/file.xml']
    
    574. phần tử hiện tại

  • import untangle
    obj = untangle.parse['path/to/file.xml']
    
    443,
    import untangle
    obj = untangle.parse['path/to/file.xml']
    
    444. nhận xét hiện tại / hướng dẫn xử lý

  • import untangle
    obj = untangle.parse['path/to/file.xml']
    
    577. một tuple
    import untangle
    obj = untangle.parse['path/to/file.xml']
    
    578 đặt tên cho ánh xạ không gian tên đã khai báo

  • import untangle
    obj = untangle.parse['path/to/file.xml']
    
    579.
    import xmltodict
    
    with open['path/to/file.xml'] as fd:
        doc = xmltodict.parse[fd.read[]]
    
    97 [điều này có thể thay đổi trong phiên bản tương lai]

Các sự kiện được cung cấp trong cuộc gọi trước tới

import untangle
obj = untangle.parse['path/to/file.xml']
569 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 vòng 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ừ
import untangle
obj = untangle.parse['path/to/file.xml']
569 sẽ có kết quả không thể đoán trước

Ghi chú

obj.root.child['name']
32 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

Đã thay đổi trong phiên bản 3. 8. Các sự kiện

import untangle
obj = untangle.parse['path/to/file.xml']
443 và
import untangle
obj = untangle.parse['path/to/file.xml']
444 đã được thêm vào.

Ngoại lệ¶

lớp xml. cây etree. Yếu TốCây. Lỗi phân tích cú pháp

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

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 của

import untangle
obj = untangle.parse['path/to/file.xml']
546 để biết danh sách các mã lỗi và ý nghĩa của chúng

vị trí

Một bộ số dòng, số cột, chỉ định vị trí xảy ra lỗi

chú thích

1[1,2,3,4]

Chuỗi mã hóa có trong đầu ra XML phải phù hợp với các tiêu chuẩn thích hợp. Ví dụ: “UTF-8” hợp lệ, nhưng “UTF8” thì không. Xem https. //www. w3. org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl và https. //www. iana. org/bài tập/bộ ký tự/bộ ký tự. xhtml

Làm cách nào để phân tích cú pháp chuỗi XML trong Python?

Có hai cách để phân tích tệp bằng mô-đun 'ElementTree'. Đầu tiên là bằng cách sử dụng hàm parse[] và thứ hai là hàm fromstring[] . Hàm parse[] phân tích cú pháp tài liệu XML được cung cấp dưới dạng tệp trong khi đó, fromstring phân tích cú pháp XML khi được cung cấp dưới dạng chuỗi i. e trong ba dấu ngoặc kép.

Trình phân tích cú pháp nào là tốt nhất trong XML?

Loại quan trọng nhất là DOM và SAX được giải thích chi tiết trong bài viết này. .
Mô hình đối tượng tài liệu Trình phân tích cú pháp DOM [Dựa trên cây] là một Tiêu chuẩn W3C và chuyển đổi tài liệu XML để phân tích cú pháp thành một tập hợp các đối tượng và sử dụng API DOM. .
Trình phân tích cú pháp SAX

BeautifulSoup có thể phân tích cú pháp XML không?

Cài đặt. BeautifulSoup là một trong những thư viện được sử dụng nhiều nhất khi tìm kiếm trên web bằng Python. Vì tệp XML tương tự như tệp HTML nên tệp này cũng có khả năng phân tích cú pháp chúng . Tuy nhiên, để phân tích các tệp XML bằng BeautifulSoup, tốt nhất bạn nên sử dụng trình phân tích cú pháp lxml của Python.

Tên của thư viện Python để phân tích dữ liệu XML là gì?

Tệp xml. etree. Mô-đun ElementTree triển khai API đơn giản và hiệu quả để phân tích cú pháp và tạo dữ liệu XML.

Chủ Đề