Python mengganti nilai tag xml

Modul ini tidak aman terhadap data yang dikonstruksi secara jahat. Jika Anda perlu mengurai data yang tidak dipercaya atau tidak diautentikasi, lihat

Tutorial

Ini adalah tutorial singkat untuk menggunakan (

>>> root.tag
'data'
>>> root.attrib
{}
7 singkatnya). Tujuannya adalah untuk mendemonstrasikan beberapa blok bangunan dan konsep dasar modul

Pohon dan elemen XML

XML pada dasarnya adalah format data hierarkis, dan cara paling alami untuk merepresentasikannya adalah dengan pohon.

>>> root.tag
'data'
>>> root.attrib
{}
7 memiliki dua kelas untuk tujuan ini - mewakili seluruh dokumen XML sebagai pohon, dan mewakili satu simpul di pohon ini. Interaksi dengan seluruh dokumen (membaca dan menulis ke/dari file) biasanya dilakukan pada level. Interaksi dengan satu elemen XML dan sub-elemennya dilakukan pada level

Mengurai XML

Kami akan menggunakan dokumen XML berikut sebagai contoh data untuk bagian ini



     name="Liechtenstein">
        1
        2008
        141100
         name="Austria" direction="E"/>
         name="Switzerland" direction="W"/>
    
     name="Singapore">
        4
        2011
        59900
         name="Malaysia" direction="N"/>
    
     name="Panama">
        68
        2011
        13600
         name="Costa Rica" direction="W"/>
         name="Colombia" direction="E"/>
    

Kita dapat mengimpor data ini dengan membaca dari file

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()

Atau langsung dari string

root = ET.fromstring(country_data_as_string)
_

mem-parsing XML dari string langsung ke , yang merupakan elemen akar dari pohon yang diurai. Fungsi penguraian lainnya dapat membuat file. Periksa dokumentasi untuk memastikan

Sebagai ,

>>> for child in root:
..     print(child.tag, child.attrib)
...
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}
_7 memiliki tag dan kamus atribut

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

Ini juga memiliki simpul anak yang dapat kita iterasi

>>> for child in root:
..     print(child.tag, child.attrib)
...
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}

Anak-anak bersarang, dan kami dapat mengakses node anak tertentu berdasarkan indeks

>>> root[0][1].text
'2008'
_

Catatan

Tidak semua elemen masukan XML akan berakhir sebagai elemen pohon parsing. Saat ini, modul ini melewati semua komentar XML, instruksi pemrosesan, dan deklarasi tipe dokumen di input. Namun demikian, pohon yang dibangun menggunakan API modul ini daripada mem-parsing dari teks XML dapat memiliki komentar dan instruksi pemrosesan di dalamnya; . Deklarasi tipe dokumen dapat diakses dengan mengirimkan instance khusus ke konstruktor

Tarik API untuk penguraian non-pemblokiran

Sebagian besar fungsi penguraian yang disediakan oleh modul ini mengharuskan seluruh dokumen dibaca sekaligus sebelum mengembalikan hasil apa pun. Dimungkinkan untuk menggunakan dan memasukkan data ke dalamnya secara bertahap, tetapi ini adalah API push yang memanggil metode pada target panggilan balik, yang levelnya terlalu rendah dan tidak nyaman untuk sebagian besar kebutuhan. Kadang-kadang apa yang benar-benar diinginkan pengguna adalah dapat mengurai XML secara bertahap, tanpa memblokir operasi, sambil menikmati kenyamanan objek yang dibangun sepenuhnya.

Alat paling ampuh untuk melakukan ini adalah. Itu tidak memerlukan pembacaan pemblokiran untuk mendapatkan data XML, dan sebagai gantinya diberi data secara bertahap dengan panggilan. Untuk mendapatkan elemen XML yang diurai, panggil. Ini sebuah contoh

>>> parser = ET.XMLPullParser(['start', 'end'])
>>> parser.feed('sometext')
>>> list(parser.read_events())
[('start', )]
>>> parser.feed(' more text')
>>> for event, elem in parser.read_events():
..     print(event)
..     print(elem.tag, 'text=', elem.text)
...
end
_

Kasus penggunaan yang jelas adalah aplikasi yang beroperasi dengan cara non-pemblokiran di mana data XML diterima dari soket atau dibaca secara bertahap dari beberapa perangkat penyimpanan. Dalam kasus seperti itu, pemblokiran pembacaan tidak dapat diterima

Karena sangat fleksibel, bisa jadi tidak nyaman digunakan untuk kasus penggunaan yang lebih sederhana. Jika Anda tidak keberatan aplikasi Anda memblokir membaca data XML tetapi masih ingin memiliki kemampuan parsing inkremental, lihatlah. Ini bisa berguna saat Anda membaca dokumen XML besar dan tidak ingin menyimpannya sepenuhnya di memori

Menemukan elemen yang menarik

memiliki beberapa metode berguna yang membantu melakukan iterasi secara rekursif pada semua sub-pohon di bawahnya (anak-anaknya, anak-anak mereka, dan seterusnya). Misalnya,

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}

hanya menemukan elemen dengan tag yang merupakan turunan langsung dari elemen saat ini. menemukan anak pertama dengan tag tertentu, dan mengakses konten teks elemen. mengakses atribut elemen

>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68

Spesifikasi yang lebih canggih dari elemen mana yang dicari dimungkinkan dengan menggunakan

Memodifikasi File XML

menyediakan cara sederhana untuk membuat dokumen XML dan menuliskannya ke file. Metode melayani tujuan ini

Setelah dibuat, objek dapat dimanipulasi dengan langsung mengubah bidangnya (seperti ), menambahkan dan memodifikasi atribut (metode), serta menambahkan anak baru (misalnya dengan )

Katakanlah kita ingin menambahkan satu ke peringkat masing-masing negara, dan menambahkan atribut

>>> parser = ET.XMLPullParser(['start', 'end'])
>>> parser.feed('sometext')
>>> list(parser.read_events())
[('start', )]
>>> parser.feed(' more text')
>>> for event, elem in parser.read_events():
..     print(event)
..     print(elem.tag, 'text=', elem.text)
...
end
9 ke elemen peringkat

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')

XML kami sekarang terlihat seperti ini

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
0

Kita dapat menghapus elemen menggunakan. Katakanlah kita ingin menghapus semua negara dengan peringkat lebih tinggi dari 50

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
1

Perhatikan bahwa modifikasi bersamaan saat iterasi dapat menyebabkan masalah, seperti saat iterasi dan modifikasi daftar atau dikt Python. Oleh karena itu, contoh pertama-tama mengumpulkan semua elemen yang cocok dengan

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
1, dan baru kemudian mengulangi daftar kecocokan

XML kami sekarang terlihat seperti ini

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
2

Membuat dokumen XML

Fungsi ini juga menyediakan cara mudah untuk membuat sub-elemen baru untuk elemen tertentu

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_3

Mem-parsing XML dengan Ruang Nama

Jika input XML memiliki ruang nama, tag, dan atribut dengan awalan dalam bentuk

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
3 diperluas ke
>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
4 di mana awalan diganti dengan URI lengkap. Juga, jika ada , URI lengkap itu akan ditambahkan ke semua tag yang tidak diawali

Berikut adalah contoh XML yang menggabungkan dua ruang nama, satu dengan awalan "fiksi" dan yang lainnya berfungsi sebagai ruang nama default

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_4

Salah satu cara untuk mencari dan menjelajahi contoh XML ini adalah dengan menambahkan URI secara manual ke setiap tag atau atribut di xpath dari sebuah atau

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
5

Cara yang lebih baik untuk mencari contoh XML namespace adalah membuat kamus dengan awalan Anda sendiri dan menggunakannya dalam fungsi pencarian

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
6

Kedua pendekatan ini sama-sama keluaran

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_7

dukungan XPath

Modul ini memberikan dukungan terbatas untuk ekspresi XPath untuk menemukan elemen di pohon. Tujuannya adalah untuk mendukung sebagian kecil dari sintaks yang disingkat;

Contoh

Berikut adalah contoh yang menunjukkan beberapa kemampuan modul XPath. Kami akan menggunakan dokumen XML

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
_7 dari bagian tersebut

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
8

Untuk XML dengan ruang nama, gunakan notasi

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
8 yang memenuhi syarat

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_9

Sintaks XPath yang didukung

Sintaksis

Arti

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
_9

Memilih semua elemen anak dengan tag yang diberikan. Misalnya,

>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
_0 memilih semua elemen anak bernama
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
0, dan
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
2 memilih semua cucu bernama
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
3 di semua anak bernama
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
0.
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
_5 memilih semua tag dalam namespace yang diberikan,
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
6 memilih tag bernama
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
0 dalam (atau tidak ada) namespace, dan
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
8 hanya memilih tag yang tidak ada dalam namespace

Berubah di versi 3. 8. Dukungan untuk star-wildcard telah ditambahkan.

>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
_9

Memilih semua elemen turunan, termasuk komentar dan instruksi pemrosesan. Misalnya,

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
_0 memilih semua cucu bernama
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
3

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
2

Memilih node saat ini. Ini sebagian besar berguna di awal jalur, untuk menunjukkan bahwa itu adalah jalur relatif

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
3

Memilih semua subelemen, pada semua level di bawah elemen saat ini. Misalnya,

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
_4 memilih semua
>>> for country in root.findall('country'):
..     rank = country.find('rank').text
..     name = country.get('name')
..     print(name, rank)
...
Liechtenstein 1
Singapore 4
Panama 68
3 elemen di seluruh pohon

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
6

Memilih elemen induk. Mengembalikan

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
_7 jika jalur mencoba menjangkau leluhur elemen awal (elemen
>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
8 dipanggil)

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
_9

Memilih semua elemen yang memiliki atribut yang diberikan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_00

Memilih semua elemen yang atribut yang diberikan memiliki nilai yang diberikan. Nilai tidak boleh berisi tanda kutip

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_01

Memilih semua elemen yang atribut yang diberikan tidak memiliki nilai yang diberikan. Nilai tidak boleh berisi tanda kutip

Baru di versi 3. 10

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_02

Memilih semua elemen yang memiliki anak bernama

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
9. Hanya anak terdekat yang didukung

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_04

Memilih semua elemen yang konten teks lengkapnya, termasuk keturunan, sama dengan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
05 yang diberikan

Baru di versi 3. 7

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_06

Memilih semua elemen yang konten teks lengkapnya, termasuk keturunannya, tidak sama dengan yang diberikan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
05

Baru di versi 3. 10

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_08

Memilih semua elemen yang memiliki anak bernama

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
9 yang konten teks lengkapnya, termasuk keturunan, sama dengan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
05 yang diberikan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_11

Memilih semua elemen yang memiliki anak bernama

>>> for neighbor in root.iter('neighbor'):
..     print(neighbor.attrib)
...
{'name': 'Austria', 'direction': 'E'}
{'name': 'Switzerland', 'direction': 'W'}
{'name': 'Malaysia', 'direction': 'N'}
{'name': 'Costa Rica', 'direction': 'W'}
{'name': 'Colombia', 'direction': 'E'}
9 yang konten teks lengkapnya, termasuk keturunan, tidak sama dengan yang diberikan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
05

Baru di versi 3. 10

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_14

Memilih semua elemen yang terletak di posisi yang diberikan. Posisi dapat berupa bilangan bulat (1 adalah posisi pertama), ekspresi

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
15 (untuk posisi terakhir), atau posisi relatif terhadap posisi terakhir (e. g.
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_16)

Predikat (ekspresi dalam tanda kurung siku) harus diawali dengan nama tag, tanda bintang, atau predikat lain.

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
17 predikat harus diawali dengan nama tag

Referensi

Fungsi

xml. etree. ElementTree. kanonikalisasi(xml_data=Tidak ada, *, out=None, from_file=None, **options)

C14N 2. 0 fungsi transformasi

Canonicalization adalah cara untuk menormalkan output XML dengan cara yang memungkinkan perbandingan byte-by-byte dan tanda tangan digital. Ini mengurangi kebebasan yang dimiliki pembuat serial XML dan sebagai gantinya menghasilkan representasi XML yang lebih terbatas. Pembatasan utama berkaitan dengan penempatan deklarasi namespace, pengurutan atribut, dan spasi kosong yang tidak dapat diabaikan

Fungsi ini mengambil string data XML (xml_data) atau jalur file atau objek seperti file (from_file) sebagai input, mengubahnya menjadi bentuk kanonis, dan menuliskannya menggunakan objek out file(-like), jika disediakan, atau . File keluaran menerima teks, bukan byte. Karena itu harus dibuka dalam mode teks dengan pengkodean ________3______18

Penggunaan yang khas

root = ET.fromstring(country_data_as_string)
_0

Opsi konfigurasi adalah sebagai berikut

  • with_comments. setel ke true untuk menyertakan komentar (default. PALSU)

  • strip_text. setel ke true untuk menghapus spasi putih sebelum dan sesudah konten teks

    (bawaan. PALSU)

  • rewrite_prefixes. setel ke true untuk mengganti prefiks namespace dengan “n{angka}”

    (bawaan. PALSU)

  • qname_aware_tags. satu set nama tag sadar qname di mana awalan

    harus diganti dalam konten teks (default. kosong)

  • qname_aware_attrs. satu set nama atribut sadar qname di mana awalan

    harus diganti dalam konten teks (default. kosong)

  • kecualikan_attrs. satu set nama atribut yang tidak boleh diserialisasi

  • kecualikan_tag. satu set nama tag yang tidak boleh diserialisasi

Dalam daftar opsi di atas, "satu set" mengacu pada kumpulan atau iterable string apa pun, tidak ada pengurutan yang diharapkan

Baru di versi 3. 8

xml. etree. ElementTree. Komentar(teks=Tidak ada)

Pabrik elemen komentar. Fungsi pabrik ini membuat elemen khusus yang akan diserialkan sebagai komentar XML oleh serializer standar. String komentar dapat berupa bytestring atau string Unicode. teks adalah string yang berisi string komentar. Mengembalikan instance elemen yang mewakili komentar

Perhatikan bahwa lewati komentar di input alih-alih membuat objek komentar untuknya. An hanya akan berisi node komentar jika telah dimasukkan ke dalam pohon menggunakan salah satu metode

xml. etree. ElementTree. dump(elem)

Menulis pohon elemen atau struktur elemen ke sys. stdout. Fungsi ini harus digunakan untuk debugging saja

Format output yang tepat bergantung pada implementasi. Dalam versi ini, ditulis sebagai file XML biasa

elem adalah pohon elemen atau elemen individu

Berubah di versi 3. 8. Fungsi sekarang mempertahankan urutan atribut yang ditentukan oleh pengguna.

xml. etree. ElementTree. fromstring(teks , parser=None)

Mem-parsing bagian XML dari konstanta string. Sama dengan. teks adalah string yang berisi data XML. parser adalah contoh parser opsional. Jika tidak diberikan, parser standar digunakan. Mengembalikan sebuah instance

xml. etree. ElementTree. fromstringlist(urutan , parser=None)

Mem-parsing dokumen XML dari urutan fragmen string. urutan adalah daftar atau urutan lain yang berisi fragmen data XML. parser adalah contoh parser opsional. Jika tidak diberikan, parser standar digunakan. Mengembalikan sebuah instance

Baru di versi 3. 2

xml. etree. ElementTree. inden(pohon , ruang='  ', level=0)

Menambahkan spasi putih ke subpohon untuk mengindentasi pohon secara visual. Ini dapat digunakan untuk menghasilkan keluaran XML yang dicetak dengan cantik. pohon bisa berupa Elemen atau ElementTree. spasi adalah string spasi putih yang akan disisipkan untuk setiap level indentasi, dua karakter spasi secara default. Untuk mengindentasi sebagian subpohon di dalam pohon yang sudah terindentasi, berikan level indentasi awal sebagai level

Baru di versi 3. 9

xml. etree. ElementTree. iselement(elemen)

Periksa apakah suatu objek tampak sebagai objek elemen yang valid. elemen adalah contoh elemen. Kembalikan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_28 jika ini adalah objek elemen

xml. etree. ElementTree. iterparse(sumber , acara=None, parser=None)

Mem-parsing bagian XML ke dalam pohon elemen secara bertahap, dan melaporkan apa yang terjadi kepada pengguna. sumber adalah nama file atau berisi data XML. peristiwa adalah urutan peristiwa untuk melaporkan kembali. Acara yang didukung adalah string

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_29,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
30,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
31,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
32,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
33 dan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
34 (acara "ns" digunakan untuk mendapatkan informasi ruang nama terperinci). Jika acara dihilangkan, hanya
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_30 acara yang dilaporkan. parser adalah contoh parser opsional. Jika tidak diberikan, parser standar digunakan. parser harus merupakan subkelas dari dan hanya dapat menggunakan default sebagai target. Mengembalikan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_39 pasangan yang menyediakan

Perhatikan bahwa saat membangun pohon secara bertahap, ia mengeluarkan pemblokiran pembacaan pada sumber (atau file yang diberi nama). Dengan demikian, itu tidak cocok untuk aplikasi di mana pemblokiran pembacaan tidak dapat dilakukan. Untuk penguraian yang sepenuhnya non-pemblokiran, lihat

Catatan

hanya menjamin bahwa ia telah melihat karakter ">" dari tag awal ketika memancarkan peristiwa "mulai", jadi atributnya ditentukan, tetapi konten atribut teks dan ekor tidak ditentukan pada saat itu. Hal yang sama berlaku untuk elemen anak;

Jika Anda membutuhkan elemen yang terisi penuh, cari acara "akhir".

Tidak digunakan lagi sejak versi 3. 4. Argumen parser.

Berubah di versi 3. 8. Acara

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
43 dan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
44 telah ditambahkan.

xml. etree. ElementTree. mengurai(sumber , mengurai=None)

Mem-parsing bagian XML ke dalam pohon elemen. sumber adalah nama file atau objek file yang berisi data XML. parser adalah contoh parser opsional. Jika tidak diberikan, parser standar digunakan. Mengembalikan sebuah instance

xml. etree. ElementTree. Instruksi Pemrosesan(target , teks=None)

pabrik elemen PI. Fungsi pabrik ini membuat elemen khusus yang akan diserialkan sebagai instruksi pemrosesan XML. target adalah string yang berisi target PI. teks adalah string yang berisi konten PI, jika diberikan. Mengembalikan instance elemen, yang mewakili instruksi pemrosesan

Perhatikan bahwa melewatkan instruksi pemrosesan di input alih-alih membuat objek komentar untuknya. An hanya akan berisi node instruksi pemrosesan jika telah dimasukkan ke dalam pohon menggunakan salah satu metode

xml. etree. ElementTree. register_namespace(awalan , uri)

Mendaftarkan awalan namespace. Registri bersifat global, dan semua pemetaan yang ada untuk awalan yang diberikan atau URI namespace akan dihapus. awalan adalah awalan namespace. uri adalah ruang nama uri. Tag dan atribut dalam ruang nama ini akan diserialisasi dengan awalan yang diberikan, jika memungkinkan

Baru di versi 3. 2

xml. etree. ElementTree. SubElement(induk , tag, attrib={}, **extra)

Pabrik subelemen. Fungsi ini membuat instance elemen, dan menambahkannya ke elemen yang sudah ada

Nama elemen, nama atribut, dan nilai atribut dapat berupa bytestring atau string Unicode. induk adalah elemen induk. tag adalah nama subelemen. attrib adalah kamus opsional, yang berisi atribut elemen. ekstra berisi atribut tambahan, diberikan sebagai argumen kata kunci. Mengembalikan instance elemen

xml. etree. ElementTree. tostring(elemen , pengkodean='us-ascii', method='xml', *, xml_declaration=None, default_namespace=None, short_empty_elements=True)

Menghasilkan representasi string dari elemen XML, termasuk semua subelemen. elemen adalah instance. pengkodean adalah penyandian keluaran (standarnya adalah US-ASCII). Gunakan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_51 untuk menghasilkan string Unicode (jika tidak, bytestring dihasilkan). metodenya adalah
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_52,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
53 atau
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
54 (standarnya adalah
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
52). xml_declaration, default_namespace dan short_empty_elements memiliki arti yang sama seperti di. Mengembalikan string yang disandikan (opsional) yang berisi data XML

Baru di versi 3. 4. Parameter short_empty_elements.

Baru di versi 3. 8. Parameter xml_declaration dan default_namespace.

Berubah di versi 3. 8. Fungsi sekarang mempertahankan urutan atribut yang ditentukan oleh pengguna.

xml. etree. ElementTree. tostringlist(elemen , enkode='us-ascii', method='xml', *, xml_declaration=None, default_namespace=None, short_empty_elements=True)

Menghasilkan representasi string dari elemen XML, termasuk semua subelemen. elemen adalah instance. pengkodean adalah penyandian keluaran (standarnya adalah US-ASCII). Gunakan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_51 untuk menghasilkan string Unicode (jika tidak, bytestring dihasilkan). metodenya adalah
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_52,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
53 atau
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
54 (standarnya adalah
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
52). xml_declaration, default_namespace dan short_empty_elements memiliki arti yang sama seperti di. Mengembalikan daftar (opsional) string yang disandikan yang berisi data XML. Itu tidak menjamin urutan tertentu, kecuali bahwa
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
65

Baru di versi 3. 2

Baru di versi 3. 4. Parameter short_empty_elements.

Baru di versi 3. 8. Parameter xml_declaration dan default_namespace.

Berubah di versi 3. 8. Fungsi sekarang mempertahankan urutan atribut yang ditentukan oleh pengguna.

xml. etree. ElementTree. XML(teks , parser=None)

Mem-parsing bagian XML dari konstanta string. Fungsi ini dapat digunakan untuk menyematkan "literal XML" dalam kode Python. teks adalah string yang berisi data XML. parser adalah contoh parser opsional. Jika tidak diberikan, parser standar digunakan. Mengembalikan sebuah instance

xml. etree. ElementTree. XMLID(teks , parser=None)

Mem-parsing bagian XML dari konstanta string, dan juga mengembalikan kamus yang memetakan dari id elemen. s ke elemen. teks adalah string yang berisi data XML. parser adalah contoh parser opsional. Jika tidak diberikan, parser standar digunakan. Mengembalikan tuple yang berisi instance dan kamus

XSertakan dukungan

Modul ini memberikan dukungan terbatas untuk arahan XInclude, melalui modul helper

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
71. Modul ini dapat digunakan untuk menyisipkan subpohon dan string teks ke dalam pohon elemen, berdasarkan informasi di dalam pohon

Contoh

Berikut adalah contoh yang menunjukkan penggunaan modul XInclude. Untuk menyertakan dokumen XML dalam dokumen saat ini, gunakan elemen

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
72 dan setel atribut parse ke
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
52, dan gunakan atribut href untuk menentukan dokumen yang akan disertakan

root = ET.fromstring(country_data_as_string)
_1

Secara default, atribut href diperlakukan sebagai nama file. Anda dapat menggunakan pemuat khusus untuk mengganti perilaku ini. Perhatikan juga bahwa pembantu standar tidak mendukung sintaks XPointer

Untuk memproses file ini, muat seperti biasa, dan teruskan elemen root ke modul

root = ET.fromstring(country_data_as_string)
_2

Modul ElementInclude menggantikan elemen

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_72 dengan elemen root dari sumber. dokumen xml. Hasilnya mungkin terlihat seperti ini

root = ET.fromstring(country_data_as_string)
_3

Jika atribut parse dihilangkan, defaultnya adalah "xml". Atribut href diperlukan

Untuk menyertakan dokumen teks, gunakan elemen

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_72, dan setel atribut parse ke "text"

root = ET.fromstring(country_data_as_string)
_4

Hasilnya mungkin terlihat seperti

root = ET.fromstring(country_data_as_string)
_5

Referensi

Fungsi

xml. etree. ElemenTermasuk. default_loader(href , mengurai, encoding=None)

Pemuat bawaan. Pemuat default ini membaca sumber daya yang disertakan dari disk. href adalah URL. parse adalah untuk mode parse baik "xml" atau "teks". encoding adalah pengkodean teks opsional. Jika tidak diberikan, penyandian adalah

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_18. Mengembalikan sumber daya yang diperluas. Jika mode parse adalah
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_52, ini adalah instance ElementTree. Jika mode parse adalah "teks", ini adalah string Unicode. Jika loader gagal, ia dapat mengembalikan Tidak Ada atau memunculkan pengecualian

xml. etree. ElemenTermasuk. termasuk(elem , pemuat=None, base_url=None, max_depth=6)

Fungsi ini memperluas arahan XInclude. elem adalah elemen root. loader adalah loader sumber daya opsional. Jika dihilangkan, defaultnya adalah. Jika diberikan, itu harus berupa callable yang mengimplementasikan antarmuka yang sama. base_url adalah URL dasar dari file asli, untuk menyelesaikan relatif sertakan referensi file. max_depth adalah jumlah maksimum inklusi rekursif. Terbatas untuk mengurangi risiko ledakan konten berbahaya. Lewati nilai negatif untuk menonaktifkan batasan

Mengembalikan sumber daya yang diperluas. Jika mode parse adalah

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_52, ini adalah instance ElementTree. Jika mode parse adalah "teks", ini adalah string Unicode. Jika loader gagal, ia dapat mengembalikan Tidak Ada atau memunculkan pengecualian

Baru di versi 3. 9. Parameter base_url dan max_depth.

Objek Elemen

kelas xml. etree. ElementTree. Elemen(tag , attrib={}, **extra)

Kelas elemen. Kelas ini mendefinisikan antarmuka Elemen, dan menyediakan implementasi referensi dari antarmuka ini

Nama elemen, nama atribut, dan nilai atribut dapat berupa bytestring atau string Unicode. tag adalah nama elemen. attrib adalah kamus opsional, yang berisi atribut elemen. ekstra berisi atribut tambahan, diberikan sebagai argumen kata kunci

menandai

Sebuah string yang mengidentifikasi jenis data yang diwakili oleh elemen ini (tipe elemen, dengan kata lain)

teksekor

Atribut ini dapat digunakan untuk menyimpan data tambahan yang terkait dengan elemen. Nilainya biasanya string tetapi mungkin objek khusus aplikasi apa pun. Jika elemen dibuat dari file XML, atribut teks menyimpan teks di antara tag awal elemen dan anak pertama atau tag akhir, atau

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7, dan atribut ekor menampung teks di antara tag akhir elemen dan tag berikutnya . Untuk data XML

root = ET.fromstring(country_data_as_string)
_6

elemen a memiliki

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7 untuk atribut teks dan ekor, elemen b memiliki teks
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
85 dan ekor
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
86, elemen c memiliki teks
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
87 dan ekor
>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7, dan elemen d memiliki teks
>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7 dan ekor
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
90

Untuk mengumpulkan teks bagian dalam suatu elemen, lihat , misalnya

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
92

Aplikasi dapat menyimpan objek arbitrer dalam atribut ini

attrib

Kamus yang berisi atribut elemen. Perhatikan bahwa meskipun nilai attrib selalu merupakan kamus Python yang dapat diubah, implementasi ElementTree dapat memilih untuk menggunakan representasi internal lain, dan membuat kamus hanya jika seseorang memintanya. Untuk memanfaatkan penerapan tersebut, gunakan metode kamus di bawah jika memungkinkan

Metode seperti kamus berikut berfungsi pada atribut elemen

jelas()

Mereset elemen. Fungsi ini menghapus semua subelemen, menghapus semua atribut, dan menyetel atribut teks dan ekor ke

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7

dapatkan(kunci , default=None)

Mendapat atribut elemen bernama kunci

Mengembalikan nilai atribut, atau default jika atribut tidak ditemukan

item()

Mengembalikan atribut elemen sebagai urutan pasangan (nama, nilai). Atribut dikembalikan dalam urutan sewenang-wenang

kunci()

Mengembalikan nama atribut elemen sebagai daftar. Nama dikembalikan dalam urutan sewenang-wenang

setel(kunci , nilai)

Setel kunci atribut pada elemen ke nilai

Metode berikut bekerja pada anak elemen (subelemen)

tambahkan(subelemen)

Menambahkan subelemen elemen ke akhir daftar subelemen internal elemen ini. Menimbulkan jika subelemen bukan an

memperluas(subelemen)

Menambahkan subelemen dari objek urutan dengan nol atau lebih elemen. Dimunculkan jika subelemen bukan an

Baru di versi 3. 2

temukan(cocok , ruang nama=None)

Menemukan kecocokan subelemen pertama yang cocok. cocok mungkin nama tag atau a. Mengembalikan instance elemen atau

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7. namespaces adalah pemetaan opsional dari awalan namespace ke nama lengkap. Berikan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_99 sebagai awalan untuk memindahkan semua nama tag tanpa awalan dalam ekspresi ke ruang nama yang diberikan

findall(cocok , ruang nama=None)

Menemukan semua subelemen yang cocok, dengan nama tag atau. Mengembalikan daftar yang berisi semua elemen yang cocok dalam urutan dokumen. namespaces adalah pemetaan opsional dari awalan namespace ke nama lengkap. Berikan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_99 sebagai awalan untuk memindahkan semua nama tag tanpa awalan dalam ekspresi ke ruang nama yang diberikan

findtext(cocok , default=None, namespaces=None)

Menemukan teks untuk pencocokan subelemen pertama yang cocok. cocok mungkin nama tag atau a. Mengembalikan konten teks dari elemen pertama yang cocok, atau default jika tidak ada elemen yang ditemukan. Perhatikan bahwa jika elemen yang cocok tidak memiliki konten teks, string kosong dikembalikan. namespaces adalah pemetaan opsional dari awalan namespace ke nama lengkap. Berikan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_99 sebagai awalan untuk memindahkan semua nama tag tanpa awalan dalam ekspresi ke ruang nama yang diberikan

masukkan(indeks , subelemen)

Menyisipkan subelemen pada posisi tertentu dalam elemen ini. Menimbulkan jika subelemen bukan an

iter(tag=Tidak ada)

Membuat pohon dengan elemen saat ini sebagai root. Iterator mengulangi elemen ini dan semua elemen di bawahnya, dalam urutan dokumen (kedalaman pertama). Jika tag bukan

>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
_7 atau
root = ET.fromstring(country_data_as_string)
05, hanya elemen yang tagnya sama dengan tag yang dikembalikan dari iterator. Jika struktur pohon diubah selama iterasi, hasilnya tidak terdefinisi

Baru di versi 3. 2

iterfind(cocok , ruang nama=None)

Menemukan semua subelemen yang cocok, dengan nama tag atau. Mengembalikan iterable yang menghasilkan semua elemen yang cocok dalam urutan dokumen. namespaces adalah pemetaan opsional dari awalan namespace ke nama lengkap

Baru di versi 3. 2

itertext()

Membuat iterator teks. Iterator mengulang elemen ini dan semua subelemen, dalam urutan dokumen, dan mengembalikan semua teks dalam

Baru di versi 3. 2

makeelement(tag , attrib)

Membuat objek elemen baru dengan tipe yang sama dengan elemen ini. Jangan panggil metode ini, gunakan fungsi pabrik sebagai gantinya

hapus(subelemen)

Menghapus subelemen dari elemen. Berbeda dengan metode find*, metode ini membandingkan elemen berdasarkan identitas instance, bukan pada nilai atau konten tag

objek juga mendukung metode tipe urutan berikut untuk bekerja dengan subelemen. , , ,

Peringatan. Elemen tanpa subelemen akan diuji sebagai

root = ET.fromstring(country_data_as_string)
12. Perilaku ini akan berubah di versi mendatang. Gunakan tes
root = ET.fromstring(country_data_as_string)
_13 atau
root = ET.fromstring(country_data_as_string)
14 tertentu sebagai gantinya

root = ET.fromstring(country_data_as_string)
_7

Sebelum Python 3. 8, urutan serialisasi atribut XML elemen secara artifisial dibuat dapat diprediksi dengan mengurutkan atribut berdasarkan namanya. Berdasarkan urutan dikte yang sekarang dijamin, penataan ulang sewenang-wenang ini telah dihapus di Python 3. 8 untuk mempertahankan urutan di mana atribut awalnya diuraikan atau dibuat oleh kode pengguna

Secara umum, kode pengguna harus mencoba untuk tidak bergantung pada urutan atribut tertentu, mengingat Kumpulan Informasi XML secara eksplisit mengecualikan urutan atribut dari penyampaian informasi. Kode harus disiapkan untuk menangani pemesanan apa pun pada input. Dalam kasus di mana keluaran XML deterministik diperlukan, mis. g. untuk penandatanganan kriptografi atau set data uji, serialisasi kanonis tersedia dengan fungsi tersebut

Dalam kasus di mana keluaran kanonis tidak dapat diterapkan tetapi urutan atribut tertentu masih diinginkan pada keluaran, kode harus bertujuan untuk membuat atribut secara langsung dalam urutan yang diinginkan, untuk menghindari ketidakcocokan perseptual bagi pembaca kode. Dalam kasus di mana hal ini sulit dicapai, resep seperti berikut ini dapat diterapkan sebelum serialisasi untuk menjalankan perintah secara terpisah dari pembuatan Elemen

root = ET.fromstring(country_data_as_string)
_8

Objek ElementTree

kelas xml. etree. ElementTree. ElementTree(elemen=Tidak ada, file=None)

kelas pembungkus ElementTree. Kelas ini mewakili seluruh hierarki elemen, dan menambahkan beberapa dukungan ekstra untuk serialisasi ke dan dari XML standar

elemen adalah elemen root. Pohon diinisialisasi dengan konten file XML jika diberikan

_setroot(elemen)

Menggantikan elemen root untuk pohon ini. Ini membuang isi pohon saat ini, dan menggantinya dengan elemen yang diberikan. Gunakan dengan hati-hati. elemen adalah contoh elemen

temukan(cocok , ruang nama=None)

Sama seperti , mulai dari akar pohon

findall(cocok , ruang nama=None)

Sama seperti , mulai dari akar pohon

findtext(cocok , default=None, namespaces=None)

Sama seperti , mulai dari akar pohon

getroot()

Mengembalikan elemen root untuk pohon ini

iter(tag=Tidak ada)

Membuat dan mengembalikan iterator pohon untuk elemen root. Iterator mengulang semua elemen dalam pohon ini, dalam urutan bagian. tag adalah tag yang harus dicari (standarnya adalah mengembalikan semua elemen)

iterfind(cocok , ruang nama=None)

Sama seperti , mulai dari akar pohon

Baru di versi 3. 2

mengurai(sumber , mengurai=None)

Memuat bagian XML eksternal ke dalam pohon elemen ini. sumber adalah nama file atau. parser adalah contoh parser opsional. Jika tidak diberikan, parser standar digunakan. Mengembalikan elemen root bagian

tulis(file , enkode='us-ascii', xml_declaration=None, default_namespace=None, method='xml', *, short_empty_elements=True)

Menulis pohon elemen ke file, sebagai XML. file adalah nama file, atau dibuka untuk menulis. pengkodean adalah penyandian keluaran (standarnya adalah US-ASCII). xml_declaration mengontrol apakah deklarasi XML harus ditambahkan ke file. Gunakan

root = ET.fromstring(country_data_as_string)
_12 untuk tidak pernah,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
28 untuk selalu,
>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7 hanya jika bukan US-ASCII atau UTF-8 atau Unicode (standarnya adalah
>>> for rank in root.iter('rank'):
..     new_rank = int(rank.text) + 1
..     rank.text = str(new_rank)
..     rank.set('updated', 'yes')
...
>>> tree.write('output.xml')
7). default_namespace menyetel namespace XML default (untuk "xmlns"). metodenya adalah
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_52,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
53 atau
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
54 (standarnya adalah
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
52). Parameter short_empty_elements hanya kata kunci mengontrol pemformatan elemen yang tidak berisi konten. Jika
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_28 (default), mereka dipancarkan sebagai satu tag yang tertutup sendiri, jika tidak, mereka dipancarkan sebagai sepasang tag awal/akhir

Outputnya adalah string () atau biner (). Ini dikendalikan oleh argumen penyandian. Jika penyandian adalah

root = ET.fromstring(country_data_as_string)
32, hasilnya adalah string; . Perhatikan bahwa ini mungkin bertentangan dengan jenis file jika terbuka;

Baru di versi 3. 4. Parameter short_empty_elements.

Berubah di versi 3. 8. Metode ini sekarang mempertahankan urutan atribut yang ditentukan oleh pengguna.

Ini adalah file XML yang akan dimanipulasi

root = ET.fromstring(country_data_as_string)
_9

Contoh mengubah atribut “target” dari setiap link di paragraf pertama

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

Objek QName

kelas xml. etree. ElementTree. QName(text_or_uri , tag=None)

pembungkus QName. Ini dapat digunakan untuk membungkus nilai atribut QName, untuk mendapatkan penanganan namespace yang tepat pada output. text_or_uri adalah string yang berisi nilai QName, dalam bentuk {uri}local, atau, jika argumen tag diberikan, bagian URI dari QName. Jika tag diberikan, argumen pertama diinterpretasikan sebagai URI, dan argumen ini diinterpretasikan sebagai nama lokal. contoh buram

Objek TreeBuilder

kelas xml. etree. ElementTree. Pembangun Pohon(element_factory=Tidak ada, *, comment_factory=None, pi_factory=None, insert_comments=False, insert_pis=False)

Pembuat struktur elemen umum. Pembangun ini mengonversi urutan panggilan metode awal, data, akhir, komentar, dan pi ke struktur elemen yang terbentuk dengan baik. Anda dapat menggunakan kelas ini untuk membangun struktur elemen menggunakan parser XML khusus, atau parser untuk beberapa format mirip XML lainnya

element_factory, ketika diberikan, harus bisa dipanggil menerima dua argumen posisi. tag dan dict atribut. Diharapkan untuk mengembalikan instance elemen baru

Fungsi comment_factory dan pi_factory, ketika diberikan, harus berperilaku seperti fungsi dan untuk membuat komentar dan memproses instruksi. Jika tidak diberikan, factory default akan digunakan. Ketika insert_comments dan/atau insert_pis benar, komentar/pis akan dimasukkan ke dalam pohon jika muncul di dalam elemen root (tetapi tidak di luarnya)

tutup()

Menghapus buffer pembangun, dan mengembalikan elemen dokumen tingkat atas. Mengembalikan sebuah instance

data(data)

Menambahkan teks ke elemen saat ini. datanya adalah string. Ini harus berupa bytestring, atau string Unicode

akhir(tag)

Menutup elemen saat ini. tag adalah nama elemen. Mengembalikan elemen tertutup

mulai(tag , attrs)

Membuka elemen baru. tag adalah nama elemen. attrs adalah kamus yang berisi atribut elemen. Mengembalikan elemen yang dibuka

komentar(teks)

Membuat komentar dengan teks yang diberikan. Jika

root = ET.fromstring(country_data_as_string)
_38 benar, ini juga akan menambahkannya ke pohon

Baru di versi 3. 8

pi(target , teks)

Membuat komentar dengan nama dan teks target yang diberikan. Jika

root = ET.fromstring(country_data_as_string)
_39 benar, ini juga akan menambahkannya ke pohon

Baru di versi 3. 8

Selain itu, objek kustom dapat menyediakan metode berikut

doctype(nama , pubid, system)

Menangani deklarasi doctype. name adalah nama doctype. pubid adalah pengidentifikasi publik. sistem adalah pengidentifikasi sistem. Metode ini tidak ada di kelas default

Baru di versi 3. 2

start_ns(awalan , uri)

Dipanggil setiap kali parser menemukan deklarasi namespace baru, sebelum callback ________4______42 untuk elemen pembuka yang mendefinisikannya. awalan adalah

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_99 untuk namespace default dan nama awalan namespace yang dideklarasikan sebaliknya. uri adalah URI namespace

Baru di versi 3. 8

end_ns(awalan)

Dipanggil setelah

root = ET.fromstring(country_data_as_string)
44 callback dari elemen yang mendeklarasikan pemetaan awalan namespace, dengan nama awalan yang keluar dari ruang lingkup

Baru di versi 3. 8

kelas xml. etree. ElementTree. Target C14NWriter(tulis , *, with_comments=False, strip_text=False, rewrite_prefixes=False, qname_aware_tags=None, qname_aware_attrs=None, exclude_attrs=None, exclude_tags=None)

C14N 2. 0 penulis. Argumennya sama dengan fungsi. Kelas ini tidak membuat pohon tetapi menerjemahkan peristiwa panggilan balik secara langsung ke dalam bentuk serial menggunakan fungsi tulis

Baru di versi 3. 8

Objek XMLParser

kelas xml. etree. ElementTree. XMLParser(* , target=None, encoding=None)

Kelas ini adalah blok bangunan tingkat rendah dari modul. Ini digunakan untuk penguraian XML berbasis peristiwa yang efisien. Itu dapat memberi makan data XML secara bertahap dengan metode ini, dan peristiwa penguraian diterjemahkan ke API push - dengan memanggil panggilan balik pada objek target. Jika target dihilangkan, standar digunakan. Jika pengkodean diberikan, nilai akan menimpa pengkodean yang ditentukan dalam file XML

Berubah di versi 3. 8. Parameter sekarang. Argumen html tidak lagi didukung.

tutup()

Selesai memasukkan data ke parser. Mengembalikan hasil pemanggilan metode

root = ET.fromstring(country_data_as_string)
_49 dari target yang diteruskan selama konstruksi;

umpan(data)

Memasukkan data ke parser. data adalah data yang dikodekan

memanggil metode

root = ET.fromstring(country_data_as_string)
51 target untuk setiap tag pembuka, metode
root = ET.fromstring(country_data_as_string)
52 untuk setiap tag penutup, dan data diproses dengan metode
root = ET.fromstring(country_data_as_string)
53. Untuk metode panggilan balik yang didukung lebih lanjut, lihat kelas. memanggil metode target
root = ET.fromstring(country_data_as_string)
_49. dapat digunakan tidak hanya untuk membangun struktur pohon. Ini adalah contoh penghitungan kedalaman maksimum file XML

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

Objek XMLPullParser

kelas xml. etree. ElementTree. XMLPullParser(peristiwa=Tidak ada)

Pull parser cocok untuk aplikasi non-blocking. API sisi masukannya mirip dengan , tetapi alih-alih mendorong panggilan ke target panggilan balik, mengumpulkan daftar peristiwa parsing internal dan membiarkan pengguna membacanya. peristiwa adalah urutan peristiwa untuk melaporkan kembali. Acara yang didukung adalah string

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_29,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
30,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
31,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
32,
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
33 dan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
34 (acara "ns" digunakan untuk mendapatkan informasi ruang nama terperinci). Jika acara dihilangkan, hanya
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
_30 acara yang dilaporkan

umpan(data)

Masukkan data byte yang diberikan ke parser

tutup()

Memberi sinyal kepada parser bahwa aliran data dihentikan. Tidak seperti , metode ini selalu kembali. Acara apa pun yang belum diambil saat parser ditutup masih dapat dibaca

read_events()

Mengembalikan iterator atas peristiwa yang telah ditemui dalam data yang diumpankan ke parser. Iterator menghasilkan

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
39 pasang, di mana acara adalah string yang mewakili jenis acara (e. g.
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
30) dan elem adalah objek yang ditemui, atau nilai konteks lainnya sebagai berikut

  • root = ET.fromstring(country_data_as_string)
    
    _73,
    root = ET.fromstring(country_data_as_string)
    
    74. Elemen saat ini

  • import xml.etree.ElementTree as ET
    tree = ET.parse('country_data.xml')
    root = tree.getroot()
    
    43,
    import xml.etree.ElementTree as ET
    tree = ET.parse('country_data.xml')
    root = tree.getroot()
    
    44. instruksi komentar / pemrosesan saat ini

  • root = ET.fromstring(country_data_as_string)
    
    _77. tuple
    root = ET.fromstring(country_data_as_string)
    
    78 menamai pemetaan namespace yang dideklarasikan

  • root = ET.fromstring(country_data_as_string)
    
    _79. (ini dapat berubah di versi mendatang)

Acara yang diberikan dalam panggilan sebelumnya ke tidak akan dihasilkan lagi. Acara dikonsumsi dari antrian internal hanya ketika diambil dari iterator, sehingga banyak pembaca yang mengulang secara paralel melalui iterator yang diperoleh dari akan memiliki hasil yang tidak dapat diprediksi

Catatan

hanya menjamin bahwa ia telah melihat karakter ">" dari tag awal ketika memancarkan peristiwa "mulai", jadi atributnya ditentukan, tetapi konten atribut teks dan ekor tidak ditentukan pada saat itu. Hal yang sama berlaku untuk elemen anak;

Jika Anda membutuhkan elemen yang terisi penuh, cari acara "akhir".

Baru di versi 3. 4

Berubah di versi 3. 8. Acara

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
43 dan
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
44 telah ditambahkan.

Pengecualian

kelas xml. etree. ElementTree. ParseError

Kesalahan penguraian XML, dimunculkan oleh berbagai metode penguraian dalam modul ini saat penguraian gagal. Representasi string dari instance pengecualian ini akan berisi pesan kesalahan yang mudah digunakan. Selain itu, ia akan memiliki atribut berikut yang tersedia

kode

Kode kesalahan numerik dari ekspat parser. Lihat dokumentasi untuk daftar kode kesalahan dan artinya

posisi

Tuple baris, nomor kolom, yang menentukan di mana kesalahan terjadi

Catatan kaki

1(,,,)

String pengkodean yang disertakan dalam keluaran XML harus sesuai dengan standar yang sesuai. Misalnya, “UTF-8” valid, tetapi “UTF8” tidak valid. Lihat dan https. // www. iana. org/penugasan/set-karakter/set-karakter. xhtml

Bagaimana cara mengubah nilai atribut XML dengan Python?

Solusi. Pertama kita mem-parsing file xml dan melakukan operasi berisi string untuk memeriksa apakah judul buku berisi "Python". Jika string berisi kata kunci, kami menggunakan metode set() untuk mengubah nilai atribut . Jalankan kode contoh di atas dan Anda akan melihat file xml asli telah dimodifikasi.

Bagaimana cara menemukan dan mengganti tag XML?

Untuk Mengganti Tag XML . Press Alt+Insert. Dari menu Bantuan Visual, pilih Ganti Semua Tag XML . Pilih pengenal dan tekan Enter untuk menyelesaikan atau Esc untuk membatalkan operasi.

Bagaimana Anda mem-parsing dan memodifikasi XML dengan Python?

Interaksi dengan satu elemen XML dan sub-elemennya dilakukan pada tingkat Elemen. .
Properti Elemen
PARSING. Kita dapat mengurai data XML dari string atau dokumen XML. Mempertimbangkan xml. etree. ElementTree sebagai ET. ET. parse('Nama file'). getroot() -ET

Bagaimana cara membaca nilai atribut dalam XML menggunakan Python?

Dapatkan Nilai Atribut yang Relevan . findall(level) , di mana level adalah posisi yang diinginkan (