Modul untuk bekerja dengan file XML

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.



All Articles