Apa yang kita lakukan
Hari ini kita akan membuat modul untuk bekerja dengan file XML .
Untuk apa
Terkadang, saat mengembangkan program dengan Python, Anda perlu membuat pengaturan yang dapat diubah oleh setiap pengguna tanpa mengubah kodenya.
Apa yang kita butuhkan
- Pengetahuan tentang bahasa pemrograman Python
- Python3
- Pustaka xml Python
Ayo mulai
Pertama, mari impor pustaka dan buat kelas utama.
import xml.etree.ElementTree as xml
class XML:
pass
Untuk bekerja dengan file XML, kita membutuhkan file XML itu sendiri, tetapi pada peluncuran pertama program, pengguna mungkin tidak memiliki file ini, jadi kita perlu membuatnya.
Saat membuat instance kelas, teruskan nama file dan simpan di parameter fileName.
import xml.etree.ElementTree as xml
class XML:
fileName:str
def __init__(self, fileName):
self.fileName = fileName + ".xml"
Sekarang kita akan menulis fungsi yang akan memeriksa apakah file kita ada dan akan memanggilnya pada saat membuat instance kelas.
import xml.etree.ElementTree as xml
class XML:
fileName:str
def __init__(self, fileName):
self.fileName = fileName + ".xml"
self.openFile()
def openFile(self):
try:
file = open(self.fileName, "r")
except FileNotFoundError:
print("File not found")
Selanjutnya, kita akan menulis fungsi yang akan membuat file kita jika tidak ada, dan kita akan memanggilnya jika program tidak menemukan file tersebut.
class XML:
fileName:str
def __init__(self, fileName):
self.fileName = fileName + ".xml"
self.openFile()
def openFile(self):
try:
file = open(self.fileName, "r")
except FileNotFoundError:
self.createFile()
def createFile(self):
rootXML = xml.Element("settings")
text = xml.Element("text")
text.text = "Text"
rootXML.append(text)
file = open(self.fileName, "w")
file.write(xml.tostring(rootXML, encoding="utf-8", method="xml").decode(encoding="utf-8"))
file.close()
Sekarang mari kita lihat lebih dekat fungsi XML.createFile ():
- rootXML adalah elemen utama yang akan memungkinkan penulisan semua pengaturan ke file baru jauh lebih cepat daripada jika kita menulis semua tag secara terpisah
- teks adalah tag yang akan ditampilkan di dalam rootXML. Di kolom Element.text, tentukan apa yang harus ada di dalam elemen
Untuk membuat daftar barang, misalnya:
<settings>
<text>Hello, world!</text>
<list>
<item>1</item>
<item>2</item>
<item>3</item>
</list>
</settings>
Buat elemen utama, dalam kasus kami "daftar" dan sub-elemen "item".
list = xml.Element("list")
rootXML.append(list)
item: xml.SubElement
item = xml.SubElement(list, "item")
item.text = "1"
item = xml.SubElement(list, "item")
item.text = "2"
item = xml.SubElement(list, "item")
item.text = "3"
#xml.SubElement(parent: xml.Element or xml.SubElement, tag: str)
#
Jika program kita adalah program dengan antarmuka, dan file pengaturan digunakan untuk menyimpan nilai apa pun yang dapat diubah oleh pengguna, maka kita memerlukan fungsi yang dapat mengubah nilai suatu elemen. Ayo tulis.
class XML:
fileName:str
def __init__(self, fileName):
self.fileName = fileName + ".xml"
self.openFile()
def openFile(self):
try:
file = open(self.fileName, "r")
except FileNotFoundError:
self.createFile()
def createFile(self):
rootXML = xml.Element("settings")
text = xml.Element("text")
text.text = "Text"
rootXML.append(text)
file = open(self.fileName, "w")
file.write(xml.tostring(rootXML, encoding="utf-8", method="xml").decode(encoding="utf-8"))
file.close()
def editFile(self, element, value):
tree = xml.ElementTree(file=self.fileName)
rootXML = tree.getroot()
for elem in rootXML.iter(element):
elem.text = str(value)
tree = xml.ElementTree(rootXML)
tree.write(self.fileName)
Dalam fungsi editFile (), kami mengirimkan nama elemen (elemen) yang ingin kami ubah dan nilai baru (nilai).
Dan hal terakhir yang Anda perlukan untuk pekerjaan apa pun dengan file XML adalah penguraian data.
class XML:
fileName:str
def __init__(self, fileName):
self.fileName = fileName + ".xml"
self.openFile()
def openFile(self):
try:
file = open(self.fileName, "r")
except FileNotFoundError:
self.createFile()
def createFile(self):
rootXML = xml.Element("settings")
text = xml.Element("text")
text.text = "Text"
rootXML.append(text)
file = open(self.fileName, "w")
file.write(xml.tostring(rootXML, encoding="utf-8", method="xml").decode(encoding="utf-8"))
file.close()
def editFile(self, element, value):
tree = xml.ElementTree(file=self.fileName)
rootXML = tree.getroot()
for elem in rootXML.iter(element):
elem.text = str(value)
tree = xml.ElementTree(rootXML)
tree.write(self.fileName)
def parsingFile(self, elements, text = True):
tree = xml.ElementTree(file=self.fileName)
rootXML = tree.getroot()
for element in rootXML.iter(elements):
if (text):
return element.text
return element
Dalam metode parsingFile (), kita meneruskan nama tag (elemen) yang ingin kita terima dan nilai boolean yang akan dikembalikan tipe datanya. Jika teks = True maka nilai elemen akan dikembalikan, jika tidak, objek, yang kemudian dapat diulang. Misalnya, kami memiliki file XML:
<settings>
<text>Hello, world!</text>
<list>
<item>1</item>
<item>2</item>
<item>3</item>
</list>
</settings>
Dan jika kita ingin menampilkan semua nilai item ke konsol, maka kita mengurai parameter "list" dan meneruskan False di parameter ke-2 ke parsingFile (). Kami mulai mengulang elemen yang diterima dan elemen tampilan. Teks - memiliki nilai elemen yang dipilih.
import XML as xml
moduleXml = xml.XML("settings")
for element in moduleXml.parsingFile("list", False):
print(element.text)
Setelah menjalankan kode ini di konsol, kita akan melihat:
1
2
3
Kesimpulan
Hasilnya, kami mendapatkan modul yang dapat digunakan dalam proyek Anda untuk bekerja dengan file XML.
Proyek di gitHub
Terima kasih semua dan semoga berhasil.