Hướng dẫn how does python process xml data? - python xử lý dữ liệu xml như thế nào?

Hướng dẫn dành cho người mới bắt đầu

Nhiếp ảnh tập trung nông của nhện Web Web của Robert Anasch trên unplash

Tìm hiểu cách bạn có thể phân tích, khám phá, sửa đổi và điền các tệp XML với gói Python ElementTree, cho các vòng lặp và biểu thức XPath. Là một nhà khoa học dữ liệu, bạn sẽ thấy rằng việc hiểu XML rất mạnh mẽ cho cả thực hành web và thực hành chung trong việc phân tích một tài liệu có cấu trúc

Ngôn ngữ đánh dấu có thể mở rộng (XML) là ngôn ngữ đánh dấu mã hóa các tài liệu bằng cách xác định một tập hợp các quy tắc ở cả định dạng có thể đọc được bằng máy và có thể đọc được. Mở rộng từ SGML (Ngôn ngữ đánh dấu tổng quát tiêu chuẩn), nó cho phép chúng tôi mô tả cấu trúc của tài liệu. Trong XML, chúng ta có thể xác định các thẻ tùy chỉnh. Chúng tôi cũng có thể sử dụng XML làm định dạng tiêu chuẩn để trao đổi thông tin.(XML) is a markup language which encodes documents by defining a set of rules in both machine-readable and human-readable format. Extended from SGML (Standard Generalized Markup Language), it lets us describe the structure of the document. In XML, we can define custom tags. We can also use XML as a standard format to exchange information.

  • Các tài liệu XML có các phần, được gọi là các phần tử, được xác định bởi một thẻ bắt đầu và thẻ kết thúc. Một thẻ là một cấu trúc đánh dấu bắt đầu bằng
    tree = ET.parse('movies.xml')
    root = tree.getroot()
    3 và kết thúc bằng
    tree = ET.parse('movies.xml')
    root = tree.getroot()
    4. Các ký tự giữa thẻ bắt đầu và thẻ kết thúc, nếu có bất kỳ, là nội dung của phần tử. Các yếu tố có thể chứa đánh dấu, bao gồm các yếu tố khác, được gọi là "các yếu tố con".elements, defined by a beginning and an ending tag. A tag is a markup construct that begins with
    tree = ET.parse('movies.xml')
    root = tree.getroot()
    3 and ends with
    tree = ET.parse('movies.xml')
    root = tree.getroot()
    4. The characters between the start-tag and end-tag, if there are any, are the element's content. Elements can contain markup, including other elements, which are called "child elements".
  • Phần tử cấp cao nhất, cấp cao nhất được gọi là gốc, chứa tất cả các yếu tố khác.root, which contains all other elements.
  • Các thuộc tính là cặp có giá trị tên tồn tại trong thẻ bắt đầu hoặc thẻ phần tử trống. Một thuộc tính XML chỉ có thể có một giá trị duy nhất và mỗi thuộc tính có thể xuất hiện nhiều nhất một lần trên mỗi phần tử.

Ở đây, một ảnh chụp nhanh

tree = ET.parse('movies.xml')
root = tree.getroot()
5 mà chúng tôi sẽ sử dụng cho hướng dẫn này:






DVD
1981
PG

'Archaeologist and adventurer Indiana Jones
is hired by the U.S. government to find the Ark of the Covenant before the Nazis.'



DVD,Online
1984
PG
None provided.


Blu-ray
1985
PG
Marty McFly




dvd, digital
2000
PG-13
Two mutants come to a private academy for their kind whose resident superhero team must oppose a terrorist organization with similar powers.


VHS
1992
PG13
NA.


Online
1992
R
WhAtEvER I Want!!!?!





DVD
1979
R
"""""""""




DVD
1986
PG13
Funny movie on funny guy


blue-ray
2000
Unrated
psychopathic Bateman


Giới thiệu về ElementTree

Cấu trúc cây XML làm cho điều hướng, sửa đổi và loại bỏ tương đối đơn giản theo chương trình. Python có một thư viện, ElementTree tích hợp, có các chức năng để đọc và thao tác XMLS (và các tệp có cấu trúc tương tự khác).ElementTree, that has functions to read and manipulate XMLs (and other similarly structured files).

Đầu tiên, nhập

tree = ET.parse('movies.xml')
root = tree.getroot()
6. Đó là một thực tế phổ biến để sử dụng bí danh của
tree = ET.parse('movies.xml')
root = tree.getroot()
7:

import xml.etree.ElementTree as ET

Phân tích dữ liệu XML

Trong tệp XML được cung cấp, có một bộ phim cơ bản được mô tả. Vấn đề duy nhất là dữ liệu là một mớ hỗn độn! Đã có rất nhiều người phụ trách khác nhau của bộ sưu tập này và mọi người đều có cách nhập dữ liệu riêng vào tệp. Mục tiêu chính trong hướng dẫn này sẽ là đọc và hiểu tệp với Python - sau đó khắc phục các vấn đề.

Đầu tiên bạn cần đọc trong tệp với

tree = ET.parse('movies.xml')
root = tree.getroot()
6.

tree = ET.parse('movies.xml')
root = tree.getroot()

Bây giờ bạn đã khởi tạo cây, bạn nên nhìn vào XML và in ra các giá trị để hiểu cách cấu trúc cây.

root.tag'collection'

Ở cấp cao nhất, bạn thấy rằng XML này được bắt nguồn từ thẻ

tree = ET.parse('movies.xml')
root = tree.getroot()
9.

root.attrib{}

Cho các vòng lặp

Bạn có thể dễ dàng lặp lại trên các phần mềm (thường được gọi là trẻ em trẻ em) trong root bằng cách sử dụng một vòng lặp đơn giản cho vòng lặp.

for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}

Bây giờ bạn biết rằng những đứa trẻ của gốc

tree = ET.parse('movies.xml')
root = tree.getroot()
9 đều là
root.tag'collection'
1. Để chỉ định thể loại, XML sử dụng thuộc tính
root.tag'collection'
2. Có những bộ phim hành động, phim kinh dị và hài kịch theo yếu tố
root.tag'collection'
1.

Thông thường, rất hữu ích khi biết tất cả các yếu tố trong toàn bộ cây. Một chức năng hữu ích để làm điều đó là

root.tag'collection'
4.

[elem.tag for elem in root.iter()]['collection',
'genre',
'decade',
'movie',
'format',
'year',
'rating',
'description',
'movie',
.
.
.
.
'movie',
'format',
'year',
'rating',
'description']

Có một cách hữu ích để xem toàn bộ tài liệu. Nếu bạn chuyển gốc vào phương thức

root.tag'collection'
5, bạn có thể trả lại toàn bộ tài liệu. Trong ElementTree, phương pháp này có một dạng hơi lạ.

Vì ElementTree là một thư viện mạnh mẽ có thể diễn giải nhiều hơn chỉ XML, bạn phải chỉ định cả mã hóa và giải mã tài liệu bạn đang hiển thị dưới dạng chuỗi.

Bạn có thể mở rộng việc sử dụng chức năng

root.tag'collection'
6 để giúp tìm các yếu tố cụ thể quan tâm.
root.tag'collection'
4 sẽ liệt kê tất cả các subels trong root phù hợp với phần tử được chỉ định. Ở đây, bạn sẽ liệt kê tất cả các thuộc tính của phần tử
root.tag'collection'
8 trong cây:

for movie in root.iter('movie'):
print(movie.attrib)
{'favorite': 'True', 'title': 'Indiana Jones: The raiders of the lost Ark'}
{'favorite': 'True', 'title': 'THE KARATE KID'}
{'favorite': 'False', 'title': 'Back 2 the Future'}
{'favorite': 'False', 'title': 'X-Men'}
{'favorite': 'True', 'title': 'Batman Returns'}
{'favorite': 'False', 'title': 'Reservoir Dogs'}
{'favorite': 'False', 'title': 'ALIEN'}
{'favorite': 'True', 'title': "Ferris Bueller's Day Off"}
{'favorite': 'FALSE', 'title': 'American Psycho'}
{'favorite': 'False', 'title': 'Batman: The Movie'}
{'favorite': 'True', 'title': 'Easy A'}
{'favorite': 'True', 'title': 'Dinner for SCHMUCKS'}
{'favorite': 'False', 'title': 'Ghostbusters'}
{'favorite': 'True', 'title': 'Robin Hood: Prince of Thieves'}

Biểu thức XPath

Nhiều lần các yếu tố sẽ không có thuộc tính, chúng sẽ chỉ có nội dung văn bản. Sử dụng thuộc tính

root.tag'collection'
9, bạn có thể in nội dung này.

Bây giờ, in ra tất cả các mô tả của các bộ phim.

for description in root.iter('description'):
print(description.text)
'Archaeologist and adventurer Indiana Jones is hired by the U.S. government to find the Ark of the Covenant before the Nazis.'None provided.
Marty McFly
Two mutants come to a private academy for their kind whose resident superhero team must oppose a terrorist organization with similar powers.
NA.
WhAtEvER I Want!!!?!
"""""""""
Funny movie about a funny guy
psychopathic Bateman
What a joke!
Emma Stone = Hester Prynne
Tim (Rudd) is a rising executive who “succeeds” in finding the perfect guest, IRS employee Barry (Carell), for his boss’ monthly event, a so-called “dinner for idiots,” which offers certain
advantages to the exec who shows up with the biggest buffoon.
Who ya gonna call?
Robin Hood slaying

In XML rất hữu ích, nhưng XPath là ngôn ngữ truy vấn được sử dụng để tìm kiếm thông qua XML nhanh chóng và dễ dàng. Tuy nhiên, việc hiểu XPath là cực kỳ quan trọng đối với việc quét và điền XMLS.

tree = ET.parse('movies.xml')
root = tree.getroot()
6 có chức năng
root.attrib{}
1 sẽ đi qua những đứa trẻ ngay lập tức của yếu tố được tham chiếu.

Tại đây, bạn sẽ tìm kiếm cây cho những bộ phim ra mắt vào năm 1992:

for movie in root.findall("./genre/decade/movie/[year='1992']"):
print(movie.attrib)
{'favorite': 'True', 'title': 'Batman Returns'}
{'favorite': 'False', 'title': 'Reservoir Dogs'}

Hàm

root.attrib{}
1 luôn bắt đầu tại phần tử được chỉ định. Loại chức năng này cực kỳ mạnh mẽ cho "Tìm và thay thế". Bạn thậm chí có thể tìm kiếm trên các thuộc tính!

Bây giờ, chỉ in ra những bộ phim có sẵn ở nhiều định dạng (một thuộc tính).

import xml.etree.ElementTree as ET
0

Động não tại sao, trong trường hợp này, câu lệnh in trả về các giá trị của vâng của

root.attrib{}
3. Hãy suy nghĩ về cách xác định vòng lặp "cho".

Mẹo: Sử dụng

root.attrib{}
4 bên trong XPath để trả về phần tử cha của phần tử hiện tại.: use
root.attrib{}
4 inside of XPath to return the parent element of the current element.

import xml.etree.ElementTree as ET
1

Sửa đổi XML

Trước đó, các tựa phim là một mớ hỗn độn tuyệt đối. Bây giờ, in lại chúng:

for movie in root.iter('movie'):
print(movie.attrib)
{'favorite': 'True', 'title': 'Indiana Jones: The raiders of the lost Ark'}
{'favorite': 'True', 'title': 'THE KARATE KID'}
{'favorite': 'False', 'title': 'Back 2 the Future'}
{'favorite': 'False', 'title': 'X-Men'}
{'favorite': 'True', 'title': 'Batman Returns'}
{'favorite': 'False', 'title': 'Reservoir Dogs'}
{'favorite': 'False', 'title': 'ALIEN'}
{'favorite': 'True', 'title': "Ferris Bueller's Day Off"}
{'favorite': 'FALSE', 'title': 'American Psycho'}
{'favorite': 'False', 'title': 'Batman: The Movie'}
{'favorite': 'True', 'title': 'Easy A'}
{'favorite': 'True', 'title': 'Dinner for SCHMUCKS'}
{'favorite': 'False', 'title': 'Ghostbusters'}
{'favorite': 'True', 'title': 'Robin Hood: Prince of Thieves'}

Khắc phục ’2, trong tương lai. Tương lai. Đó nên là một vấn đề tìm thấy và thay thế. Viết mã để tìm tiêu đề ‘Back 2 The Future, và lưu nó dưới dạng biến:

import xml.etree.ElementTree as ET
3

Lưu ý rằng sử dụng phương thức

root.attrib{}
5 trả về một phần tử của cây. Phần lớn thời gian, nó hữu ích hơn khi chỉnh sửa nội dung trong một phần tử.

Sửa đổi thuộc tính

root.attrib{}
6 của Back 2 Biến phần tử trong tương lai để đọc "trở lại tương lai". Sau đó, in ra các thuộc tính của biến của bạn để xem sự thay đổi của bạn. Bạn có thể dễ dàng thực hiện điều này bằng cách truy cập thuộc tính của một phần tử và sau đó gán một giá trị mới cho nó:

import xml.etree.ElementTree as ET
4

Viết lại các thay đổi của bạn trở lại XML để chúng được sửa vĩnh viễn trong tài liệu. In lại các thuộc tính phim của bạn một lần nữa để đảm bảo các thay đổi của bạn hoạt động. Sử dụng phương thức

root.attrib{}
7 để làm điều này:

import xml.etree.ElementTree as ET
5

Sửa các thuộc tính

Thuộc tính

root.attrib{}
3 không chính xác ở một số nơi. Sử dụng
tree = ET.parse('movies.xml')
root = tree.getroot()
6 để sửa lỗi chỉ định dựa trên số lượng bộ phim xuất hiện. Đầu tiên, in
for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
0Attribution và văn bản để xem phần nào cần được sửa.

import xml.etree.ElementTree as ET
6

Có một số công việc cần phải được thực hiện trên thẻ này.

Bạn có thể sử dụng Regex để tìm dấu phẩy - điều đó sẽ cho biết liệu thuộc tính

root.attrib{}
3 nên là "có" hoặc "không". Thêm và sửa đổi các thuộc tính có thể được thực hiện dễ dàng với
for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
2Method.

import xml.etree.ElementTree as ET
7

Các yếu tố di chuyển

Một số dữ liệu đã được đặt trong thập kỷ sai. Sử dụng những gì bạn đã học về XML và

tree = ET.parse('movies.xml')
root = tree.getroot()
6 để tìm và sửa lỗi dữ liệu thập kỷ.

Sẽ rất hữu ích khi in ra cả thẻ

for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
4 và thẻ
for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
5 trong toàn bộ tài liệu.

import xml.etree.ElementTree as ET
8

Hai năm trong thập kỷ sai là những bộ phim từ những năm 2000. Tìm hiểu những bộ phim đó là gì, sử dụng biểu thức XPath.

import xml.etree.ElementTree as ET
9

Bạn phải thêm một thẻ thập kỷ mới, những năm 2000, vào thể loại hành động để di chuyển dữ liệu X-Men. Phương pháp

for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
6 có thể được sử dụng để thêm thẻ này vào cuối XML.

tree = ET.parse('movies.xml')
root = tree.getroot()
0

Bây giờ hãy nối bộ phim X-Men vào những năm 2000 và loại bỏ nó khỏi những năm 1990, lần lượt sử dụng

for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
7 và
for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
8.

tree = ET.parse('movies.xml')
root = tree.getroot()
1

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

Tốt, vì vậy về cơ bản bạn đã có thể chuyển toàn bộ một bộ phim sang một thập kỷ mới. Lưu các thay đổi của bạn trở lại XML.

tree = ET.parse('movies.xml')
root = tree.getroot()
2

Sự kết luận

ElementTree là một thư viện Python quan trọng cho phép bạn phân tích và điều hướng một tài liệu XML. Sử dụng ElementTree phá vỡ tài liệu XML trong cấu trúc cây dễ hoạt động. Khi nghi ngờ, hãy in nó ra (

for child in root:
print(child.tag, child.attrib)
genre {'category': 'Action'}
genre {'category': 'Thriller'}
genre {'category': 'Comedy'}
9) - Sử dụng câu lệnh in hữu ích này để xem toàn bộ tài liệu XML cùng một lúc.

Người giới thiệu

  • Bài viết gốc như được xuất bản bởi Steph Howson: DataCamp
  • Tài liệu Python 3: ElementTree
  • Wikipedia: XML

Làm thế nào để Python xử lý XML?

Để đọ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 (thông tin chung). Sau đó chuyển tên tệp của tệp XML cho ElementTree. Phương thức Parse (), để cho phép phân tích tệp XML của chúng tôi. Sau đó, nhận được gốc (thẻ cha) của tệp XML của chúng tôi bằng GetRoot ().

Xử lý XML trong Python là gì?

XML là ngôn ngữ nguồn mở di động, cho phép các lập trình viên phát triển các ứng dụng có thể được đọc bởi các ứng dụng khác, bất kể hệ điều hành và/hoặc ngôn ngữ phát triển.a portable, open source language that allows programmers to develop applications that can be read by other applications, regardless of operating system and/or developmental language.

Dữ liệu XML được xử lý như thế nào?

Bạn có thể phân tích các tài liệu XML từ một hệ thống gốc có nguồn gốc được bật cho định dạng dữ liệu XML.Bạn cũng có thể phân tích các tài liệu XML trong một trường trong bản ghi trình thu thập dữ liệu với bộ xử lý trình phân tích cú pháp XML.Bạn có thể sử dụng định dạng dữ liệu XML và trình phân tích cú pháp XML để xử lý các tài liệu XML được định dạng tốt.parse XML documents from an origin system with an origin enabled for the XML data format. You can also parse XML documents in a field in a Data Collector record with the XML Parser processor. You can use the XML data format and the XML Parser to process well-formed XML documents.

Làm thế nào bao gồm tệp XML trong Python?

Tạo tài liệu XML bằng Python trước, chúng tôi nhập Minidom để sử dụng XML.Dom.Sau đó, chúng tôi tạo phần tử gốc và nối nó vào XML.Sau đó, tạo ra một sản phẩm con của cha mẹ là chuyên viên máy tính cho các chuyên viên máy tính.import minidom for using xml. dom . Then we create the root element and append it to the XML. After that creating a child product of parent namely Geeks for Geeks.