Trình phân tích cú pháp XML của Python cung cấp một trong những cách dễ nhất để đọc và trích xuất thông tin hữu ích từ tệp XML. Trong hướng dẫn ngắn này, chúng ta sẽ xem cách chúng ta có thể phân tích cú pháp tệp XML, sửa đổi và tạo tài liệu XML bằng cách sử dụng API XML của python ElementTree.
API Python ElementTree là một trong những cách dễ nhất để trích xuất, phân tích cú pháp và chuyển đổi dữ liệu XML.
Vì vậy, hãy bắt đầu sử dụng trình phân tích cú pháp Python XML bằng ElementTree:
Ví dụ1
Tạo tệp XML
Đầu tiên, chúng ta sẽ tạo một tệp XML mới với một phần tử và một phần tử con.
#Import required library import xml.etree.ElementTree as xml def createXML(filename): # Start with the root element root = xml.Element("users") children1 = xml.Element("user") root.append(children1) tree = xml.ElementTree(root) with open(filename, "wb") as fh: tree.write(fh) if __name__ == "__main__": createXML("testXML.xml")
Khi chúng tôi chạy chương trình trên, một tệp mới được tạo có tên “textXML.xml” trong thư mục làm việc mặc định hiện tại của chúng tôi:
Trong đó có nội dung như:
<users><user /></users>
Xin lưu ý trong khi ghi tệp, chúng tôi đã sử dụng chế độ ‘wb’ .i.e. ghi tệp ở chế độ nhị phân.
Thêm giá trị vào các phần tử XML
Hãy cung cấp một số giá trị cho các phần tử XML trong chương trình ở trên của chúng tôi:
#Import required library import xml.etree.ElementTree as xml def createXML(filename): # Start with the root element root = xml.Element("users") children1 = xml.Element("user") root.append(children1) userId1 = xml.SubElement(children1, "Id") userId1.text = "hello" userName1 = xml.SubElement(children1, "Name") userName1.text = "Rajesh" tree = xml.ElementTree(root) with open(filename, "wb") as fh: tree.write(fh) if __name__ == "__main__": createXML("testXML.xml")
Sau khi chạy chương trình trên, chúng tôi sẽ thấy rằng các phần tử mới được thêm vào các giá trị, chẳng hạn như:
<users> <user> <Id>hello</Id> <Name>Rajesh</Name> </user> </users>
Đầu ra phía trên có vẻ ổn.
Bây giờ chúng ta hãy bắt đầu chỉnh sửa tệp:
Chỉnh sửa dữ liệu XML
Hãy thêm một số dữ liệu vào từ một tệp trong chương trình hiện có của chúng tôi.
newdata.xml
<users> <user> <id>1a</id> <name>Rajesh</name> <salary>NA</salary> </user> <user> <id>2b</id> <name>TutorialsPoint</name> <salary>NA</salary> </user> <user> <id>3c</id> <name>Others</name> <salary>NA</salary> </user> </users>
Trên đây là tệp xml hiện tại của chúng tôi, hãy cố gắng cập nhật mức lương của từng người dùng:
#Import required library import xml.etree.ElementTree as ET def updateET(filename): # Start with the root element tree = ET.ElementTree(file=filename) root = tree.getroot() for salary in root.iter('salary'): salary.text = '500000' tree = ET.ElementTree(root) with open("newdata.xml", "wb") as fh: tree.write(fh) if __name__ == "__main__": updateET("newdata.xml")
Đầu ra
Vì vậy, chúng tôi thấy mức lương được thay đổi từ "NA" thành "500000".
Ví dụ:Trình phân tích cú pháp XML của Python
Bây giờ chúng ta hãy viết một chương trình khác sẽ phân tích cú pháp dữ liệu XML có trong tệp và in dữ liệu.
#Import required library import xml.etree.cElementTree as ET def parseXML(file_name): # Parse XML with ElementTree tree = ET.ElementTree(file=file_name) print(tree.getroot()) root = tree.getroot() print("tag=%s, attrib=%s" % (root.tag, root.attrib)) # get the information via the children! print("-" * 25) print("Iterating using getchildren()") print("-" * 25) users = root.getchildren() for user in users: user_children = user.getchildren() for user_child in user_children: print("%s=%s" % (user_child.tag, user_child.text)) if __name__ == "__main__": parseXML("newdata.xml")
Đầu ra
<Element 'users' at 0x0551A5A0> tag = users, attrib = {} ------------------------- Iterating using getchildren() ------------------------- id = 1a name = Rajesh salary = 500000 id = 2b name = TutorialsPoint salary = 500000 id = 3c name = Others salary = 500000