XMLファイルを操作するためのモジュール

私たちは何をしますか



今日はXMLファイルを操作するためのモジュールを作成します



何のために



Pythonでプログラムを開発する場合、ユーザーがコードを変更せずに変更できる設定を行う必要がある場合があります。



私たちは何が必要なのか



  • プログラミング言語Pythonの知識
  • Python3
  • Pythonxmlライブラリ


はじめましょう



まず、ライブラリをインポートしてメインクラスを作成しましょう。



import xml.etree.ElementTree as xml

class XML:
    pass


XMLファイルを操作するには、XMLファイル自体が必要ですが、プログラムの最初の起動時に、ユーザーがこのファイルを持っていない可能性があるため、作成する必要があります。



クラスのインスタンスを作成するときは、ファイル名を渡し、fileNameパラメーターに格納します。



import xml.etree.ElementTree as xml

class XML:
    fileName:str

    def __init__(self, fileName):
        self.fileName = fileName + ".xml"


次に、ファイルが存在するかどうかを確認し、クラスのインスタンスの作成時にそれを呼び出す関数を記述します。



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")


次に、ファイルが存在しない場合にファイルを作成する関数を記述し、プログラムがファイルを見つけられない場合にそれを呼び出します。



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()


次に、XML.createFile()関数を詳しく見てみましょう。



  • rootXMLは、すべてのタグを個別に書き込む場合よりもはるかに高速にすべての設定を新しいファイルに書き込むことができる主要な要素です。
  • textは、rootXML内に表示されるタグです。Element.textフィールドで、要素内に何を含めるかを指定します


アイテムのリストを作成するには、次に例を示します。



<settings>
    <text>Hello, world!</text>
    <list>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </list>
</settings>


メイン要素(この場合は「list」)とサブ要素「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)
#     


私たちのプログラムがインターフェースを備えたプログラムであり、ユーザーが変更できる値を格納するために設定ファイルが使用されている場合、要素の値を変更できる関数が必要です。書いてみましょう。



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)


editFile()関数で、変更する要素(element)の名前と新しい値(value)を渡します。



そして、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:
            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


parsingFile()メソッドでは、受信するタグ(要素)の名前と、返すデータタイプのブール値を渡します。text = Trueの場合、要素の値が返されます。それ以外の場合は、オブジェクトが返されます。オブジェクトは、繰り返し処理できます。たとえば、XMLファイルがあります。



<settings>
    <text>Hello, world!</text>
    <list>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </list>
</settings>


また、アイテムのすべての値をコンソールに表示する場合は、「list」パラメーターを解析し、parsingFile()の2番目のパラメーターとしてFalseを渡します。受信した要素の反復を開始し、element.textを表示します-選択した要素の値を持ちます。



import XML as xml

moduleXml = xml.XML("settings")

for element in moduleXml.parsingFile("list", False):
    print(element.text)


コンソールでこのコードを実行すると、次のように表示されます。



1
2
3


結論



その結果、プロジェクトでXMLファイルを操作するために使用できるモジュールを入手しました。



gitHubでのプロジェクト



ありがとうございました。



All Articles