Wenn Sie ein Programm in Eile machen, können Sie einen Fehler mit einem leichten Kleber namens "Nun" machen, und es wird später lächerlich. Das XML der Einstellungsdatei des Spiels, das ich in der Vergangenheit erstellt habe, befand sich in einer schrecklichen Situation, daher habe ich versucht, es mit Python zu beheben. (Die Bedeutung jedes Tags wird nicht erklärt)
<?xml version="1.0" ?>
<charadata>
<item>
<id>0</id>
<textureId>0</textureId>
<finishIndex>2</finishIndex>
<soundEffect>0</soundEffect>
<motion>
<frameCount>8</frameCount>
<imageIndex>0</imageIndex>
</motion>
<motion>
<frameCount>8</frameCount>
<imageIndex>1</imageIndex>
</motion>
<motion>
<frameCount>18</frameCount>
<imageIndex>2</imageIndex>
</motion>
<motion>
<frameCount/>
<imageIndex/>
</motion>
</item>
<item>
<id>1</id>
<textureId>2</textureId>
<finishIndex>0</finishIndex>
<soundEffect>0</soundEffect>
<motion>
<frameCount>4</frameCount>
<imageIndex>0</imageIndex>
</motion>
<motion>
<frameCount/>
<imageIndex/>
</motion>
<motion>
<frameCount/>
<imageIndex/>
</motion>
<motion>
<frameCount/>
<imageIndex/>
</motion>
</item>
<item>
<id>2</id>
<textureId>2</textureId>
<finishIndex>1</finishIndex>
<soundEffect>0</soundEffect>
<motion>
<frameCount>4</frameCount>
<imageIndex>1</imageIndex>
</motion>
<motion>
<frameCount>4</frameCount>
<imageIndex>0</imageIndex>
</motion>
<motion>
<frameCount/>
<imageIndex/>
</motion>
<motion>
<frameCount/>
<imageIndex/>
</motion>
</item>
</charadata>
Gewesen sein sollte
<?xml version="1.0" ?>
<charadata>
<item>
<id>0</id>
<finishIndex>2</finishIndex>
<soundEffect>0</soundEffect>
<textureId>0</textureId>
<frameCount_00>8</frameCount_00>
<frameCount_01>8</frameCount_01>
<frameCount_02>18</frameCount_02>
<frameCount_03></frameCount_03>
<imageIndex_00>0</imageIndex_00>
<imageIndex_01>1</imageIndex_01>
<imageIndex_02>2</imageIndex_02>
<imageIndex_03></imageIndex_03>
</item>
<item>
<id>1</id>
<textureId>2</textureId>
<finishIndex>0</finishIndex>
<soundEffect>0</soundEffect>
<frameCount_00>4</frameCount_00>
<frameCount_01></frameCount_01>
<frameCount_02></frameCount_02>
<frameCount_03></frameCount_03>
<imageIndex_00>0</imageIndex_00>
<imageIndex_01></imageIndex_01>
<imageIndex_02></imageIndex_02>
<imageIndex_03></imageIndex_03>
</item>
<item>
<id>2</id>
<textureId>2</textureId>
<finishIndex>1</finishIndex>
<soundEffect>0</soundEffect>
<frameCount_00>4</frameCount_00>
<frameCount_01>4</frameCount_01>
<frameCount_02></frameCount_02>
<frameCount_03></frameCount_03>
<imageIndex_00>1</imageIndex_00>
<imageIndex_01>0</imageIndex_01>
<imageIndex_02></imageIndex_02>
<imageIndex_03></imageIndex_03>
</item>
</charadata>
Ich habs gemacht. Die Teile, die aufgelistet werden sollen, werden als einzelne Tags verwaltet. Es ist eine schreckliche Auslassung.
Ich hatte die Gelegenheit, dieses (Seelen-) falsche XML wiederzuverwenden.
・ Eine schwierige Menge, die von Hand repariert werden kann
・ Es ist genauer, das Problem mit einem Programm zu beheben
Also habe ich versucht, ein Lichtprogramm wie folgt zu erstellen. (Nun, die Verwendung von Lehrbuchprogrammen)
exchange_xml.py
# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom
#Eingabequelle
src_path = "./aaaa.xml"
tree = ET.parse(src_path)
src_root = tree.getroot()
print("src_root:"+src_root.tag)
#Ausgabeziel
dest_path = "./aaaa02.xml"
dest_root = ET.Element(src_root.tag)
print("dest_root:"+dest_root.tag)
#Elemente in XML abrufen und neu schreiben
for item in src_root.findall("item"):
#Elementerfassung, Keine(=Wenn es wie NULL ist, geben Sie ein leeres Zeichen ein
id=""
textureId=""
finishIndex=""
soundEffect=""
frameCount_00=""
frameCount_01=""
frameCount_02=""
frameCount_03=""
imageIndex_00=""
imageIndex_01=""
imageIndex_02=""
imageIndex_03=""
if item.find("id").text is not None:
id = item.find("id").text
if item.find("textureId").text is not None:
textureId = item.find("textureId").text
if item.find("finishIndex").text is not None:
finishIndex = item.find("finishIndex").text
if item.find("soundEffect").text is not None:
soundEffect = item.find("soundEffect").text
if item.find("frameCount_00").text is not None:
frameCount_00 = item.find("frameCount_00").text
if item.find("frameCount_01").text is not None:
frameCount_01 = item.find("frameCount_01").text
if item.find("frameCount_02").text is not None:
frameCount_02 = item.find("frameCount_02").text
if item.find("frameCount_03").text is not None:
frameCount_03 = item.find("frameCount_03").text
if item.find("imageIndex_00").text is not None:
imageIndex_00 = item.find("imageIndex_00").text
if item.find("imageIndex_01").text is not None:
imageIndex_01 = item.find("imageIndex_01").text
if item.find("imageIndex_02").text is not None:
imageIndex_02 = item.find("imageIndex_02").text
if item.find("imageIndex_03").text is not None:
imageIndex_03 = item.find("imageIndex_03").text
#Ausgabeinformationssatz
dest_item = ET.SubElement(dest_root, "item")
dest_id = ET.SubElement(dest_item, "id")
dest_id.text = id
dest_textureId = ET.SubElement(dest_item, "textureId")
dest_textureId.text = textureId
dest_finishIndex = ET.SubElement(dest_item, "finishIndex")
dest_finishIndex.text = finishIndex
dest_soundEffect = ET.SubElement(dest_item, "soundEffect")
dest_soundEffect.text = soundEffect
#Listeninformationen festlegen
#0 ..
motion00 = ET.SubElement(dest_item, "motion")
motion00_frameCount = ET.SubElement(motion00, "frameCount")
motion00_frameCount.text = frameCount_00
motion00_imageIndex = ET.SubElement(motion00, "imageIndex")
motion00_imageIndex.text = imageIndex_00
#Zuerst
motion01 = ET.SubElement(dest_item, "motion")
motion01_frameCount = ET.SubElement(motion01, "frameCount")
motion01_frameCount.text = frameCount_01
motion01_imageIndex = ET.SubElement(motion01, "imageIndex")
motion01_imageIndex.text = imageIndex_01
#Der Zweite
motion02 = ET.SubElement(dest_item, "motion")
motion02_frameCount = ET.SubElement(motion02, "frameCount")
motion02_frameCount.text = frameCount_02
motion02_imageIndex = ET.SubElement(motion02, "imageIndex")
motion02_imageIndex.text = imageIndex_02
#Der dritte
motion03 = ET.SubElement(dest_item, "motion")
motion03_frameCount = ET.SubElement(motion03, "frameCount")
motion03_frameCount.text = frameCount_03
motion03_imageIndex = ET.SubElement(motion03, "imageIndex")
motion03_imageIndex.text = imageIndex_03
#Neue Ausgabe von neu zusammengesetztem XML
string = ET.tostring(dest_root, 'utf-8')
pretty_string = minidom.parseString(string).toprettyxml(indent=' ')
with open(dest_path, 'w') as f:
f.write(pretty_string)
Das ist in Ordnung. Die Python-Version könnte 2.7 oder 3.5 sein. Es wäre besser gewesen, Konstanten oder reguläre Ausdrücke für jeden Elementnamen zu verwenden, aber es ist kein sehr großes Programm, und ich frage mich, ob es in Ordnung ist, es den Leuten vorzustellen. Wenn Sie nach grundlegenden Geschichten über Element Tree und Minidom suchen, werden Sie Bang Bang finden. Bitte beziehen Sie sich darauf. Dieses Mal habe ich nur "XML gelesen und analysiert" und "XML-Informationen neu geschrieben und in eine Datei ausgegeben".
Eigentlich ist Python noch ein Anfänger, und ich war diesmal in der Lage, das zu tun, was ich mit dem Programm tun sollte. "Machen wir es mit Python! Es scheint beliebt zu sein! Wenn der Zweck der Programmierung der gleiche ist, kann jeder den gleichen Code erstellen. Ich begann mit "Ich mache mir Sorgen!" ... Nein, es ist gut, Python. Das Beste ist, dass Sie das Programm interaktiv ausprobieren können. Dies ist einfach für Anfänger (nein, wirklich). Sie können die Grammatik und Fehlermeldungen auch überprüfen, indem Sie das Programm Zeile für Zeile eingeben. Sie können auch über den Programmablauf nachdenken, während Sie den Code eingeben (obwohl er nicht wirklich gut ist). Wenn in Zukunft ein wenig Verarbeitung erforderlich ist, werde ich sie wahrscheinlich in Python erstellen.
Recommended Posts