sách gpt4 ai đã đi

Cách phân tích cú pháp XML bằng Python

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-29 22:32:09 32 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Bài đăng trên blog CFSDN này Cách phân tích cú pháp XML bằng Python được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.

XML là gì?

XML là viết tắt của eXtensible Markup Language, một tập hợp con của Standard Generalized Markup Language, là ngôn ngữ đánh dấu được sử dụng để đánh dấu các tài liệu điện tử nhằm tạo cấu trúc cho chúng. Bạn có thể tìm hiểu hướng dẫn về XML thông qua trang web này.

XML được thiết kế để truyền tải và lưu trữ dữ liệu.

XML là một tập hợp các quy tắc để xác định các thẻ ngữ nghĩa giúp chia tài liệu thành các phần và xác định các phần đó.

Nó cũng là một ngôn ngữ siêu đánh dấu, nghĩa là nó định nghĩa một ngôn ngữ cú pháp để định nghĩa các ngôn ngữ đánh dấu có cấu trúc, ngữ nghĩa và theo miền cụ thể khác.

Phân tích cú pháp XML bằng Python.

Các giao diện lập trình XML phổ biến bao gồm DOM và SAX. Hai giao diện này xử lý các tệp XML theo những cách khác nhau và có các tình huống sử dụng khác nhau.

Python có ba phương pháp để phân tích cú pháp XML: SAX, DOM và ElementTree

1.SAX (API đơn giản cho XML).

Thư viện chuẩn Python bao gồm trình phân tích cú pháp SAX. SAX sử dụng mô hình hướng sự kiện để xử lý các tệp XML bằng cách kích hoạt từng sự kiện một trong quá trình phân tích cú pháp XML và gọi các hàm gọi lại do người dùng xác định.

2.DOM (Mô hình đối tượng tài liệu).

Phân tích dữ liệu XML thành một cây trong bộ nhớ và thao tác XML bằng cách vận hành cây.

Nội dung của tệp ví dụ XML movies.xml được sử dụng trong chương này như sau:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
26
27
28
29
30
31
32
33
< bộ sưu tập cái kệ = "Hàng mới về" >
< bộ phim tiêu đề = "Kẻ thù phía sau" >
   < kiểu >Chiến tranh, Kinh dị kiểu >
   < định dạng >Đĩa DVD định dạng >
   < năm >2003 năm >
   < xếp hạng >PG xếp hạng >
   < các ngôi sao >10 các ngôi sao >
   < Sự miêu tả >Nói về chiến tranh Mỹ-Nhật Sự miêu tả >
bộ phim >
< bộ phim tiêu đề = "Transformers" >
   < kiểu >Anime, Khoa học viễn tưởng kiểu >
   < định dạng >Đĩa DVD định dạng >
   < năm >1989 năm >
   < xếp hạng >R xếp hạng >
   < các ngôi sao >8 các ngôi sao >
   < Sự miêu tả >Một hư cấu khoa học Sự miêu tả >
bộ phim >
   < bộ phim tiêu đề = "Trigun" >
   < kiểu >Anime, Hành động kiểu >
   < định dạng >Đĩa DVD định dạng >
   < các tập phim >4 các tập phim >
   < xếp hạng >PG xếp hạng >
   < các ngôi sao >10 các ngôi sao >
   < Sự miêu tả >Vash the Stampede! Sự miêu tả >
bộ phim >
< bộ phim tiêu đề = "Ishtar" >
   < kiểu >Hài kịch kiểu >
   < định dạng >VHS định dạng >
   < xếp hạng >PG xếp hạng >
   < các ngôi sao >2 các ngôi sao >
   < Sự miêu tả >Sự nhàm chán có thể nhìn thấy Sự miêu tả >
bộ phim >
bộ sưu tập >

Python sử dụng SAX để phân tích cú pháp xml.

SAX là một API hướng sự kiện.

Việc phân tích cú pháp tài liệu XML bằng SAX bao gồm hai phần: trình phân tích cú pháp và trình xử lý sự kiện.

Bộ phân tích cú pháp có trách nhiệm đọc tài liệu XML và gửi các sự kiện như sự kiện bắt đầu và kết thúc phần tử đến trình xử lý sự kiện.

Trình xử lý sự kiện có trách nhiệm phản hồi sự kiện và xử lý dữ liệu XML được truyền vào.

  • 1. Xử lý các tập tin lớn;
  • 2. Chỉ cần một phần nội dung tệp hoặc chỉ cần thông tin cụ thể từ tệp.
  • 3. Khi bạn muốn xây dựng mô hình đối tượng của riêng mình.

Để xử lý XML bằng SAX trong Python, trước tiên bạn phải nhập hàm phân tích cú pháp trong xml.sax và ContentHandler trong xml.sax.handler.

Giới thiệu phương thức lớp ContentHandler.

phương pháp ký tự (nội dung).

Thời gian gọi:

Từ đầu dòng, trước khi gặp thẻ, sẽ có các ký tự và giá trị của nội dung là các chuỗi này.

Từ thẻ này sang thẻ tiếp theo là các ký tự và giá trị của nội dung là các chuỗi này.

Trong một thẻ, trước khi gặp ký tự kết thúc dòng, sẽ có các ký tự và giá trị của nội dung là các chuỗi này.

Thẻ có thể là thẻ bắt đầu hoặc thẻ kết thúc.

Phương thức startDocument().

Được gọi khi tài liệu được bắt đầu.

Phương thức endDocument().

Được gọi khi trình phân tích cú pháp đến cuối tài liệu.

phương thức startElement(name, attrs).

Được gọi khi gặp thẻ bắt đầu XML, name là tên của thẻ và attrs là từ điển các giá trị thuộc tính cho thẻ.

phương thức endElement(name).

Được gọi khi gặp thẻ đóng XML.

phương thức make_parser.

Phương pháp sau đây tạo một đối tượng phân tích cú pháp mới và trả về nó.

?
1
xml.sax.make_parser( [danh sách phân tích cú pháp] )

Mô tả tham số

  • parser_list - tham số tùy chọn, danh sách các trình phân tích cú pháp

phương pháp phân tích cú pháp.

Phương pháp sau đây tạo ra trình phân tích cú pháp SAX và phân tích cú pháp tài liệu XML:

?
1
xml.sax.parse(xmlfile, trình xử lý nội dung[, trình xử lý lỗi])

Mô tả tham số

  • xmlfile - tên tệp xml
  • contenthandler - phải là một đối tượng ContentHandler
  • errorhandler - nếu được chỉ định, errorhandler phải là đối tượng SAX ErrorHandler

phương thức parseString.

Phương thức parseString tạo ra một trình phân tích cú pháp XML và phân tích một chuỗi XML:

?
1
xml.sax.parseString(xmlstring, trình xử lý nội dung[, trình xử lý lỗi])

Mô tả tham số

  • xmlstring - chuỗi xml
  • contenthandler - phải là một đối tượng ContentHandler
  • errorhandler - nếu được chỉ định, errorhandler phải là đối tượng SAX ErrorHandler

Ví dụ phân tích cú pháp XML của Python.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/python3
 
nhập khẩu xml. sax
 
lớp học Trình xử lý phim(xml.sax.ContentHandler):
   định nghĩa __khởi tạo__( bản thân ):
    bản thân .Dữ liệu hiện tại = ""
    bản thân . kiểu = ""
    bản thân . định dạng = ""
    bản thân .năm = ""
    bản thân .đánh giá = ""
    bản thân .sao = ""
    bản thân .Sự miêu tả = ""
 
   # Phần tử bắt đầu gọi
   định nghĩa bắt đầuPhần tử( bản thân , thẻ, thuộc tính):
    bản thân .Dữ liệu hiện tại = nhãn
    nếu như nhãn = = "bộ phim" :
      in ( "********Bộ phim********" )
      tiêu đề = thuộc tính[ "tiêu đề" ]
      in ( "Tiêu đề:" , tiêu đề)
 
   # Phần tử kết thúc cuộc gọi
   định nghĩa phần tử cuối( bản thân , nhãn):
    nếu như bản thân .Dữ liệu hiện tại = = "kiểu" :
      in ( "Kiểu:" , bản thân . kiểu )
    nếu bản thân .Dữ liệu hiện tại = = "định dạng" :
      in ( "Định dạng:" , bản thân . định dạng )
    nếu bản thân .Dữ liệu hiện tại = = "năm" :
      in ( "Năm:" , bản thân .năm)
    nếu bản thân .Dữ liệu hiện tại = = "xếp hạng" :
      in ( "Xếp hạng:" , bản thân .đánh giá)
    nếu bản thân .Dữ liệu hiện tại = = "sao" :
      in ( "Các ngôi sao:" , bản thân .sao)
    nếu bản thân .Dữ liệu hiện tại = = "Sự miêu tả" :
      in ( "Sự miêu tả:" , bản thân .Sự miêu tả)
    bản thân .Dữ liệu hiện tại = ""
 
   # Được gọi khi đọc ký tự
   định nghĩa nhân vật( bản thân , nội dung):
    nếu như bản thân .Dữ liệu hiện tại = = "kiểu" :
      bản thân . kiểu = nội dung
    nếu bản thân .Dữ liệu hiện tại = = "định dạng" :
      bản thân . định dạng = nội dung
    nếu bản thân .Dữ liệu hiện tại = = "năm" :
      bản thân .năm = nội dung
    nếu bản thân .Dữ liệu hiện tại = = "xếp hạng" :
      bản thân .đánh giá = nội dung
    nếu bản thân .Dữ liệu hiện tại = = "sao" :
      bản thân .sao = nội dung
    nếu bản thân .Dữ liệu hiện tại = = "Sự miêu tả" :
      bản thân .Sự miêu tả = nội dung
 
nếu như ( __tên__ = = "__chủ yếu__" ):
  
   # Tạo một XMLReader
   bộ phân tích cú pháp = xml.sax.make_parser()
   # Đóng không gian tên
   bộ phân tích cú pháp.setFeature(xml.sax.handler.feature_namespaces, 0 )
 
   # Ghi đè ContextHandler
   Người xử lý = Trình xử lý phim()
   parser.setContentHandler( Trình xử lý )
  
   parser.parse( "phim.xml" )

Kết quả thực hiện của đoạn mã trên như sau:

*****Phim***** Tựa đề: Enemy Behind Thể loại: Chiến tranh, Phim kinh dị Định dạng: DVD Năm: 2003 Xếp hạng: PG Sao: 10 Mô tả: Nói về cuộc chiến tranh giữa Hoa Kỳ và Nhật Bản *****Phim***** Tựa đề: Transformers Thể loại: Anime, Khoa học viễn tưởng Định dạng: DVD Năm: 1989 Xếp hạng: R Sao: 8 Mô tả: Một tác phẩm khoa học viễn tưởng *****Phim***** Tựa đề: Trigun Thể loại: Anime, Phim hành động Định dạng: DVD Xếp hạng: PG Sao: 10 Mô tả: Vash the Stampede! *****Phim***** Tựa đề: Ishtar Thể loại: Hài Định dạng: VHS Xếp hạng: PG Sao: 2 Mô tả: Sự nhàm chán có thể xem được 。

Để biết tài liệu đầy đủ về API SAX, hãy xem API Python SAX.

Sử dụng xml.dom để phân tích cú pháp xml.

Mô hình đối tượng tài liệu (DOM) là giao diện lập trình chuẩn để xử lý ngôn ngữ đánh dấu mở rộng được tổ chức W3C đề xuất.

Khi trình phân tích cú pháp DOM phân tích cú pháp một tài liệu XML, nó sẽ đọc toàn bộ tài liệu cùng một lúc và lưu tất cả các phần tử trong tài liệu vào một cấu trúc cây trong bộ nhớ. Sau đó, bạn có thể sử dụng các hàm khác nhau do DOM cung cấp để đọc hoặc sửa đổi nội dung và cấu trúc của tài liệu hoặc ghi nội dung đã sửa đổi vào tệp XML.

Sử dụng xml.dom.minidom trong Python để phân tích cú pháp các tệp XML. Ví dụ như sau:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
26
27
28
#!/usr/bin/python3
 
từ xml.dom.minidom nhập khẩu phân tích
nhập khẩu xml.dom.minidom
 
# Mở tài liệu XML bằng trình phân tích cú pháp minidom
DOMTree = xml.dom.minidom.parse( "phim.xml" )
bộ sưu tập = DOMTree.documentPhần tử
nếu như bộ sưu tập.hasAttribute( "cái kệ" ):
   in ( "Phần tử gốc: %s" % bộ sưu tập.getAttribute( "cái kệ" ))
 
# Nhận tất cả các bộ phim trong bộ sưu tập
phim = bộ sưu tập.getElementsByTagName( "bộ phim" )
 
# In thông tin chi tiết cho từng phim
bộ phim TRONG phim:
   in ( "********Bộ phim********" )
   nếu như phim.hasAttribute( "tiêu đề" ):
    in ( "Tiêu đề: %s" % phim.getAttribute( "tiêu đề" ))
 
   kiểu = phim.getElementsByTagName( 'kiểu' )[ 0 ]
   in ( "Loại: %s" % kiểu .childNodes[ 0 ].dữ liệu)
   định dạng = phim.getElementsByTagName( 'định dạng' )[ 0 ]
   in ( "Định dạng: %s" % định dạng .childNodes[ 0 ].dữ liệu)
   xếp hạng = phim.getElementsByTagName( 'xếp hạng' )[ 0 ]
   in ( "Xếp hạng: %s" % đánh giá.childNodes[ 0 ].dữ liệu)
   Sự miêu tả = phim.getElementsByTagName( 'Sự miêu tả' )[ 0 ]
   in ( "Mô tả: %s" % mô tả.childNodes[ 0 ].dữ liệu)

Kết quả thực hiện của chương trình trên như sau:

Yếu tố gốc: Phim mới ra mắt *****Phim***** Tựa đề: Enemy Behind Thể loại: Chiến tranh, Phim kinh dị Định dạng: DVD Xếp hạng: PG Mô tả: Nói về chiến tranh Mỹ-Nhật *****Phim***** Tựa đề: Transformers Thể loại: Anime, Khoa học viễn tưởng Định dạng: DVD Xếp hạng: R Mô tả: Một tác phẩm khoa học viễn tưởng *****Phim***** Tựa đề: Trigun Thể loại: Anime, Hành động Định dạng: DVD Xếp hạng: PG Mô tả: Vash the Stampede! *****Phim***** Tựa đề: Ishtar Thể loại: Hài kịch Định dạng: VHS Xếp hạng: PG Mô tả: Sự nhàm chán có thể xem được 。

Để biết tài liệu đầy đủ về DOM API, hãy xem Python DOM API.

Trên đây là chi tiết về cách Python phân tích cú pháp XML. Để biết thêm thông tin về Python phân tích cú pháp XML, vui lòng chú ý đến các bài viết liên quan khác của tôi! .

Liên kết gốc: https://www.runoob.com/python3/python3-xml-processing.html.

Cuối cùng, bài viết này về cách Python phân tích cú pháp XML kết thúc tại đây. Nếu bạn muốn biết thêm về cách Python phân tích cú pháp XML, vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

32 4 0
qq735679552
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com