~~ Ich habe das Tutorial im Internet überprüft und es hat nicht funktioniert, daher werde ich es als Erinnerung veröffentlichen. ~~ [22.11.2019 Nachtrag] Es ist peinlich, aber dieser Fall scheint durch mein Missverständnis verursacht worden zu sein, und das Problem, das ich zu Beginn vorstellte, trat überhaupt nicht auf. .. .. Ich werde den Artikel verlassen, weil das Verhalten um ".//" ein wenig hilfreich sein kann, einschließlich der Bedeutung von Selbstdisziplin.
Ich hatte die Möglichkeit, XML (Zeichencode ist EUC-JP) mit Python3 zu verarbeiten, und ich habe mich damit befasst
test.xml(Die Datei, die ursprünglich verarbeitet wurde, hatte mehr Tags als diese und es gab viele Attributwerte usw.)
<root><tag>
<hoge>
<hogehoge>aaa</hogehoge>
</hoge>
<fuga>bbb</fuga>
<fugo>ccc</fugo>
・
(Weggelassen)
・
</tag>
<tag2>
・
(Weggelassen)
・
</tag2>
</root>
Die Zugriffsmethoden auf die Elemente sind wie folgt.
test.py
import xml.etree.ElementTree as Et
def test():
# ElementTree.parse()Scheint nur Unicode zu unterstützen
#Sobald die Datei geöffnet ist und die Zeichenfolge aus dem Lesen erhalten wird
with open(r'HogePath/FugaPath/test.xml', 'r', encoding='euc_jp') as f:
root: Et.Element = Et.fromstring(f.read())
#Beim Erhalten des Textes "aaa" von hogehoge
print(root[0][0][0].text)
if __name__=='__main__':
test()
Da XML kompliziert wurde, wollte ich es mit XPath verwenden. Lesen Sie daher die Informationen im Internet
Endlich wurde mir klar, dass ich mich überhaupt geirrt hatte(Selbstdisziplin)
print(root.findall('./hoge/hogehoge')[0].text)
Ich habe versucht zu schreiben, aber es hat nicht funktioniert und ich habe "Indexfehler: Listenindex außerhalb des Bereichs" erhalten. Erstens ist das folgende Ergebnis selbst leer ... ~~ Mit anderen Worten, es scheint, dass es nicht richtig genommen wird. ~~ ** ← Das ist falsch! !! ** ** **
print(root.findall('./hoge/hogehoge'))
** Die Situation ist im Beispiel zu einfach und leicht zu verstehen, aber zu diesem Zeitpunkt habe ich das "Tag" übersehen. .. .. </ font> Das Folgende ist eine Methode, die zur Hälfte gezwungen war, dieses Versehen zu lösen. ** ** **
Es scheint ein Problem mit der Spezifikationsmethode um die Wurzel von XPath zu geben
print(root.findall('.//hoge/hogehoge')[0].text)
Es wurde gelöst, indem der Kopfteil auf ".//" wie geändert wurde. ** ← Es scheint, dass es mit Gewalt gelöst wurde ** Ich frage mich, ob ich mich daran erinnern sollte, dass es mit der URL usw. identisch ist. Ich habe dieses Prinzip nicht befolgt, daher würde ich mich freuen, wenn mich jemand unterrichten könnte. ~~
[Aktualisiert am 22. November 2019] Nach dem, was @LOZTPX in den Kommentaren gelehrt hat
// repräsentiert die Menge aller Nachkommen des Startknotens, wobei der Knotenpfad weggelassen wird.
Das war's! Selbst wenn ich das Obige übersehen habe, habe ich es aufgegriffen, ohne mir des "Tags" bewusst zu sein ... Dies war eine Lernerfahrung.
Sehen wir uns den Inhalt der XML-Datei an, der ordnungsgemäß behandelt werden soll ()
Recommended Posts