Làm thế nào để bạn phân tích cú pháp đọc và viết xml trong python?

Trong bài viết này, chúng ta sẽ tìm hiểu nhiều cách khác nhau để đọc tệp XML trong Python. Chúng tôi sẽ sử dụng một số mô-đun và thư viện tích hợp có sẵn trong Python cũng như một số ví dụ tùy chỉnh có liên quan. Trước tiên, chúng ta hãy xem nhanh dạng đầy đủ của XML, giới thiệu về XML, sau đó đọc về các mô-đun phân tích cú pháp khác nhau để đọc tài liệu XML trong Python

Giới thiệu về XML

XML là viết tắt của Extensible Markup Language. Nó cần thiết để theo dõi lượng kiến ​​​​thức nhỏ đến trung bình. Nó cho phép các lập trình viên phát triển các ứng dụng của riêng họ để đọc dữ liệu từ các ứng dụng khác. Phương pháp đọc thông tin từ tệp XML và phân tích sâu hơn cấu trúc logic của nó được gọi là Phân tích cú pháp. Do đó, đọc một tệp XML cũng giống như phân tích cú pháp tài liệu XML

Trong bài viết này, chúng ta sẽ xem xét bốn cách khác nhau để đọc tài liệu XML bằng cách sử dụng các mô-đun XML khác nhau. họ đang

1. MiniDOM [Mô hình đối tượng tài liệu tối thiểu]

2. BeautifulSoup cùng với trình phân tích cú pháp lxml

3. cây nguyên tố

4. API đơn giản cho XML [SAX]

Tệp XML. Chúng tôi đang sử dụng tệp XML này để đọc trong các ví dụ của chúng tôi


    
        model1abc
        model2abc
    

Đọc tệp XML bằng MiniDOM

Nó là mô-đun Python, được sử dụng để đọc tệp XML. Nó cung cấp chức năng

xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
0 để đọc tệp
xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
1. Chúng ta phải nhập Minidom trước khi sử dụng chức năng của nó trong ứng dụng. Cú pháp của chức năng này được đưa ra dưới đây

cú pháp

xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]

Hàm này trả về một tài liệu kiểu XML

Ví dụ đọc tệp XML bằng Python

Vì mỗi nút sẽ được coi là một đối tượng, nên chúng tôi có thể truy cập các thuộc tính và văn bản của một phần tử bằng cách sử dụng các thuộc tính của đối tượng. Nhìn vào ví dụ dưới đây, chúng tôi đã truy cập các thuộc tính và văn bản của một nút đã chọn

from xml.dom import minidom

# parse an xml file by name
file = minidom.parse['models.xml']

#use getElementsByTagName[] to get tag
models = file.getElementsByTagName['model']

# one specific item attribute
print['model #2 attribute:']
print[models[1].attributes['name'].value]

# all item attributes
print['\nAll attributes:']
for elem in models:
  print[elem.attributes['name'].value]

# one specific item's data
print['\nmodel #2 data:']
print[models[1].firstChild.data]
print[models[1].childNodes[0].data]

# all items data
print['\nAll model data:']
for elem in models:
  print[elem.firstChild.data]


thuộc tính mô hình #2
mô hình2
Tất cả các thuộc tính
mô hình1
mô hình2
dữ liệu mô hình #2
mô hình2abc
mô hình2abc
Tất cả dữ liệu mô hình
người mẫu1abc
mô hình2abc

Đọc tệp XML bằng BeautifulSoup cùng với trình phân tích cú pháp lxml

Trong ví dụ này, chúng tôi sẽ sử dụng thư viện Python có tên_______1_______2. Beautiful Soup hỗ trợ trình phân tích cú pháp HTML [lxml] có trong thư viện chuẩn của Python. Sử dụng lệnh sau để cài đặt trình phân tích cú pháp lmxl và soup đẹp mắt trong trường hợp chưa cài đặt

#for beautifulsoup
pip install beautifulsoup4

#for lmxl parser
pip install lxml

Sau khi cài đặt thành công, hãy sử dụng các thư viện này trong code python

Chúng tôi đang sử dụng tệp XML này để đọc bằng mã Python


  Acer is a laptop
  Add model number here
  Onida is an oven
  Exclusive
  Add price here
  Add content here
     Add company name here
     Add number of employees here
  

Ví dụ đọc tệp XML bằng Python

Hãy đọc tệp trên bằng thư viện beautifulsoup trong tập lệnh python

________số 8_______


[Add model number here, Add price here]
Acer là máy tính xách tay
12

Đọc tệp XML bằng cây phần tử

Mô-đun

xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
3 cung cấp cho chúng ta nhiều công cụ để thao tác với các tệp XML. Không cần cài đặt. Do định dạng XML có trong định dạng dữ liệu phân cấp, việc biểu diễn nó bằng cây trở nên dễ dàng hơn. Element Tree đại diện cho toàn bộ tài liệu XML dưới dạng một cây duy nhất

Ví dụ đọc tệp XML bằng Python

Để đọc một tệp XML, 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. Sau đó, chúng tôi sẽ chuyển tên tệp của tệp XML sang phương thức

xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
4, để bắt đầu phân tích cú pháp. Sau đó, chúng tôi sẽ nhận được thẻ cha của tệp XML bằng cách sử dụng
xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
5. Sau đó, chúng tôi sẽ hiển thị thẻ cha của tệp XML. Bây giờ, để lấy các thuộc tính của thẻ con của thẻ cha sẽ sử dụng
xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
6. Cuối cùng, hiển thị văn bản được đặt trong thẻ phụ thứ nhất của thẻ phụ thứ 5 của thẻ gốc

# importing element tree
import xml.etree.ElementTree as ET 

# Pass the path of the xml document 
tree = ET.parse['models.xml'] 

# get the parent tag 
root = tree.getroot[] 

# print the root [parent] tag along with its memory location 
print[root] 

# print the attributes of the first tag  
print[root[0].attrib] 

# print the text contained within first subtag of the 5th tag from the parent 
print[root[5][0].text] 



{'Tên'. 'Acer', 'số lượng'. '12'}
Thêm tên công ty vào đây

Đọc tệp XML bằng cách sử dụng API đơn giản cho XML [SAX]

Trong phương pháp này, đầu tiên, đăng ký gọi lại cho các sự kiện xảy ra, sau đó trình phân tích cú pháp tiến hành thông qua tài liệu. điều này có thể hữu ích khi tài liệu lớn hoặc có giới hạn bộ nhớ. Nó phân tích tệp vì nó đọc nó từ đĩa và toàn bộ tệp không được lưu trong bộ nhớ. Đọc XML bằng phương pháp này yêu cầu tạo ContentHandler bằng cách phân lớp

xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
7

xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
8 Phương pháp này có thể không tương thích với phiên bản Python 3. Vui lòng kiểm tra phiên bản của bạn trước khi thực hiện phương pháp này

  • ContentHandler - xử lý các thẻ và thuộc tính của XML. ContentHandler được gọi ở đầu và cuối mỗi phần tử
  • startDocument và endDocument - được gọi ở đầu và cuối tệp XML
  • Nếu trình phân tích cú pháp không ở chế độ không gian tên, thì các phương thức startElement[tag, attribute] và endElement[tag] được gọi;

tệp XML



   35000
   12
   Samsung


   46500
   14
   Onida

   
   30000
   8
   Lenovo


   45000
   12
   Acer

Ví dụ mã Python

import xml.sax

class XMLHandler[xml.sax.ContentHandler]:
    def __init__[self]:
        self.CurrentData = ""
        self.price = ""
        self.qty = ""
        self.company = ""

   # Call when an element starts
    def startElement[self, tag, attributes]:
        self.CurrentData = tag
        if[tag == "model"]:
            print["*****Model*****"]
            title = attributes["number"]
            print["Model number:", title]

   # Call when an elements ends
    def endElement[self, tag]:
        if[self.CurrentData == "price"]:
            print["Price:", self.price]
        elif[self.CurrentData == "qty"]:
            print["Quantity:", self.qty]
        elif[self.CurrentData == "company"]:
            print["Company:", self.company]
        self.CurrentData = ""

   # Call when a character is read
    def characters[self, content]:
        if[self.CurrentData == "price"]:
            self.price = content
        elif[self.CurrentData == "qty"]:
            self.qty = content
        elif[self.CurrentData == "company"]:
            self.company = content

# create an XMLReader
parser = xml.sax.make_parser[]

# turn off namepsaces
parser.setFeature[xml.sax.handler.feature_namespaces, 0]

# override the default ContextHandler
Handler = XMLHandler[]
parser.setContentHandler[ Handler ]
parser.parse["models.xml"]


*****Mô hình*****
Số mô hình. ST001
Giá bán. 35000
Định lượng. 12
Công ty. SAMSUNG
*****Mô hình*****
Số mô hình. RW345
Giá bán. 46500
Định lượng. 14
Công ty. Onida
*****Mô hình*****
Số mô hình. EX366
Giá bán. 30000
Định lượng. số 8
Công ty. lenovo
*****Mô hình*****
Số mô hình. FU699
Giá bán. 45000
Định lượng. 12
Công ty. Acer

Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về tệp XML và các cách khác nhau để đọc tệp XML bằng cách sử dụng một số mô-đun và API tích hợp sẵn, chẳng hạn như

xml.dom.minidom.parse[filename_or_file[, parser[, bufsize]]]
9,
from xml.dom import minidom

# parse an xml file by name
file = minidom.parse['models.xml']

#use getElementsByTagName[] to get tag
models = file.getElementsByTagName['model']

# one specific item attribute
print['model #2 attribute:']
print[models[1].attributes['name'].value]

# all item attributes
print['\nAll attributes:']
for elem in models:
  print[elem.attributes['name'].value]

# one specific item's data
print['\nmodel #2 data:']
print[models[1].firstChild.data]
print[models[1].childNodes[0].data]

# all items data
print['\nAll model data:']
for elem in models:
  print[elem.firstChild.data]
0,
from xml.dom import minidom

# parse an xml file by name
file = minidom.parse['models.xml']

#use getElementsByTagName[] to get tag
models = file.getElementsByTagName['model']

# one specific item attribute
print['model #2 attribute:']
print[models[1].attributes['name'].value]

# all item attributes
print['\nAll attributes:']
for elem in models:
  print[elem.attributes['name'].value]

# one specific item's data
print['\nmodel #2 data:']
print[models[1].firstChild.data]
print[models[1].childNodes[0].data]

# all items data
print['\nAll model data:']
for elem in models:
  print[elem.firstChild.data]
1,
from xml.dom import minidom

# parse an xml file by name
file = minidom.parse['models.xml']

#use getElementsByTagName[] to get tag
models = file.getElementsByTagName['model']

# one specific item attribute
print['model #2 attribute:']
print[models[1].attributes['name'].value]

# all item attributes
print['\nAll attributes:']
for elem in models:
  print[elem.attributes['name'].value]

# one specific item's data
print['\nmodel #2 data:']
print[models[1].firstChild.data]
print[models[1].childNodes[0].data]

# all items data
print['\nAll model data:']
for elem in models:
  print[elem.firstChild.data]
2. Chúng tôi cũng đã sử dụng một số mã phân tích cú pháp tùy chỉnh để phân tích cú pháp tệp XML

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.

Thư viện Python nào là tốt nhất để phân tích cú pháp XML?

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.

Chúng tôi có thể đọc tệp XML bằng Python không?

Giới thiệu về ElementTree. Cấu trúc cây XML làm cho việc điều hướng, sửa đổi và loại bỏ tương đối đơn giản về mặt lập trình. Python có một thư viện tích hợp sẵn, ElementTree, có chức năng đọc và thao tác với XML [và các tệp có cấu trúc tương tự khác].

Phân tích cú pháp XML là gì?

Phân tích cú pháp XML là quá trình chuyển đổi dữ liệu XML từ định dạng chuỗi được đánh số thứ tự sang định dạng phân cấp . Bạn có thể để máy chủ cơ sở dữ liệu DB2® thực hiện phân tích cú pháp ngầm hoặc bạn có thể thực hiện phân tích cú pháp XML một cách rõ ràng.

Chủ Đề