Bearbeiten Sie XML mit Namespaces in Python (Element Tree)

zunaechst

xml.etree.ElementTree http://docs.python.jp/2/library/xml.etree.elementtree.html Verwenden Sie diese Option, um XML mit dem Namespace zu analysieren.

Im Text kml (Format für Google Earth usw.) http://ja.wikipedia.org/wiki/KML Ist zielgerichtet, aber da die tatsächliche Situation XML ist, wird es auf die gleiche Weise behandelt.

Zieldaten

Ziel-KML


<?xml version='1.0' encoding='UTF-8'?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Document>
<name>Hoge</name>
 <Style id="Mapit">
 <IconStyle>
 <color>FFFFFFFF</color>
 <scale>1.0</scale>
 </IconStyle>
 </Style>
 <Style id="kml">
 <LineStyle>
 <color>FF0080FF</color>
 <width>1</width>
 </LineStyle>
 <PolyStyle>
 <color>AADDDDDD</color>
 </PolyStyle>
 </Style>
・ ・ ・
 </Document>
</kml>

Obwohl einige Teile weggelassen werden, ist das Ziel vorerst KML mit dieser Form. PolyStyle->color Der Wert von ist ** AADDDDDDD **, aber ich möchte dies ändern.

Programmcode

XML-Umschreibprogramm


# -*- coding: utf-8 -*-

from xml.etree import ElementTree

#KML-Datei lesen
tree = ElementTree.parse("in.kml")
#Namespace hinzufügen
#Wenn Sie dies nicht tun, wird ns0 beim Umschreiben allen Tags hinzugefügt.:Werden Sie wie PolyStyle
ElementTree.register_namespace('', 'http://earth.google.com/kml/2.0')

# //PolyStyle/Finde Farbe
for node in tree.findall(".//{http://earth.google.com/kml/2.0}PolyStyle/{http://earth.google.com/kml/2.0}color"):
	#Umschreiben von Inhalten
	node.text="AA001122"

#Export
#Wenn das dritte Argument wahr ist<?xml ...?>Hinzugefügt.
tree.write("out.kml","UTF-8",True)

PolyStyle->color Der Wert von wird als ** AA001122 ** exportiert.

Kommentar

xml.etree.ElementTree.findall hat am Anfang ein ".". (Es heißt Zukunftswarnung)

Es scheint, dass es eine Teilmenge von XPath verarbeiten kann. http://docs.python.jp/3/library/xml.etree.elementtree.html (Kein Artikel über Python2 gefunden)

Das Problem hier ist der Namespace.

Namensraum


<kml xmlns="http://earth.google.com/kml/2.0">

Befindet sich im Stammverzeichnis, benötigt alles darunter einen Namespace.

Wenn Sie also den Pfad angeben, müssen Sie den Namespace innerhalb von {} hinzufügen und das Tag angeben.

Da es sich um PolyStyle-> Farbe handelt, muss ich es außerdem zweimal schreiben.

xpath


//{http://earth.google.com/kml/2.0}PolyStyle/{http://earth.google.com/kml/2.0}color"

(Bitte lassen Sie mich wissen, ob es einen guten Weg gibt ...)

Als nächstes ist die Bedeutung von register_namespace Das durch Schreiben geschriebene XML

register_Ausgabe ohne Namespace


<ns0:PolyStyle>
 <ns0:color>AADDDDDD</ns0:color>
</ns0:PolyStyle>

Vermeiden Sie es, wie zu werden.

Yurubo

Die XPath-Spezifikation ist intelligenter, da es sich um register_namespace handelt Ich frage mich, ob es in beschrieben werden kann (ich muss den Namespace-URI nicht oft schreiben). .. ..

Referenz

So erhalten Sie das nächste Element mit dem in XPath angegebenen Text http://qiita.com/yuki2006/items/1f96450fc744769872c5

[Python] Gonyogonyo der Namespace von ElementTree http://d.hatena.ne.jp/nullpobug/20110420/1303293319

Recommended Posts

Bearbeiten Sie XML mit Namespaces in Python (Element Tree)
Analysieren Sie XML in Python
Lesen Sie XML mit dem in Python angegebenen Namespace
Bearbeiten Sie Dateien und Ordner in Python
Compiler in Python: PL / 0-Syntaxbaum
Bearbeiten Sie OCTA-udf-Dateinamen in Python
Algorithmus (Segmentbaum) in Python (Übung)
In Python geteiltes Rechteckbereichselement
Ausgabebaumstruktur von Dateien in Python
Verzögerter Segmentbaum in Python (Anforderung zum Debuggen)
Holen Sie sich mit Python die Niederschlagswahrscheinlichkeit aus XML
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
Compiler in Python: PL / 0 Abstract Syntax Tree (AST)
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
2. Multivariate Analyse in Python 7-3. Entscheidungsbaum [Rückgabebaum]
[Python] Rufen Sie das Element ab, indem Sie das Namensattribut in BeautifulSoup angeben
2. Multivariate Analyse in Python 7-1. Entscheidungsbaum (Scikit-Learn)
Ich möchte Strings in Kotlin wie Python manipulieren!
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python