Lesen Sie XML mit dem in Python angegebenen Namespace

Die Geschichte des Lesens von XML mit Python kam herein, also habe ich sie untersucht. Einige der XML-Tags, mit denen wir uns befassen, haben den Format-Namespace: tag_name. Ich konnte das Tag mit dem Namespace nicht gut finden, also habe ich den Code zusammengestellt.

Ich habe die Beispielcode-URL nicht hinzugefügt, also habe ich sie hinzugefügt. Beispielcode

Wenn es PHP ist, kann es mit simplexml_load_string gelesen werden. Im Falle von PHP wird es in Namespace_Tag_Name konvertiert, sodass Sie nach Knoten suchen können, ohne sich darum kümmern zu müssen.

In Python können Sie nur suchen, wenn Sie den Namespace im Voraus in einem Array speichern und das Array des Namespace übergeben, wenn Sie die Suchfunktion ausführen.

Deshalb liest man XML mit Namespace

Ziehen Sie zunächst den Inhalt des zu lesenden XML heraus. Dies ist die Tag-Struktur.

MESH03622.gml


<?xml version="1.0" encoding="UTF-8"?>
<gml:FeatureCollection xmlns:fme="http://www.safe.com/gml/fme" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.safe.com/gml/fme MESH03622.xsd">
<gml:boundedBy>
<gml:Envelope srsName="EPSG:4612" srsDimension="2">
<gml:lowerCorner>24.4333333329177 122.924999999934</gml:lowerCorner>
<gml:upperCorner>24.4833333336014 123.000000000218</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<gml:featureMember>
<fme:MESH03622 gml:id="id060c8300-20cf-4750-b6a6-6b9730bc8fb3">
<fme:FID>0</fme:FID>
<fme:KEN_ID>47</fme:KEN_ID>
<fme:KEY_CODE>36225734</fme:KEY_CODE>
<fme:MESH1_ID>3622</fme:MESH1_ID>
<fme:MESH2_ID>57</fme:MESH2_ID>
<fme:MESH3_ID>34</fme:MESH3_ID>
<gml:surfaceProperty>
<gml:Surface srsName="EPSG:4612" srsDimension="2">
<gml:patches>
<gml:PolygonPatch>
<gml:exterior>
<gml:LinearRing>
<gml:posList>24.4416666664184 122.925000000467 24.4500000000747 122.924999999934 24.4500000002353 122.937499999765 24.4416666669395 122.937499999636 24.4416666664184 122.925000000467</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:PolygonPatch>
</gml:patches>
</gml:Surface>
</gml:surfaceProperty>
</fme:MESH03622>
</gml:featureMember>

Python-Skript zum Lesen dieses XML

ReadXMLSample.py


from pprint import pprint
import os
import xml.etree.ElementTree as ET

  #Registrieren Sie jeden in XML angegebenen NameSpace
  # xmlns:fme="http://www.safe.com/gml/fme"das ist'fme' : 'http://www.safe.com/gml/fme'Wird
  ns = {'gml': 'http://www.opengis.net/gml', 'fme': 'http://www.safe.com/gml/fme', 'xlink': 'http://www.w3.org/1999/xlink'}
  tree = ET.parse(fileName)
  root = tree.getroot()

  #Holen Sie sich srsName des Attributs
  pprint ("envelope = " + root.find('gml:boundedBy/gml:Envelope', ns).attrib['srsName'].strip())

  # gml:Ich möchte das folgende FeatureMember erhalten
  fmeNodes = root.findall('gml:featureMember', ns)

  records = []
  for itemNode in fmeNodes:
    #Wenn Sie den Wert des Knotens unterhalb der Wurzel haben möchten, können Sie den Wert erhalten, indem Sie den Pfad von der Wurzel beschreiben
    #Vergessen Sie nicht, eine Reihe von Namespaces anzugeben, wenn Sie finden!
    pprint ("KEN_ID = " + itemNode.find('fme:MESH03622/fme:KEN_ID', ns).text.strip())
    #Kann durch Angabe eines relativen Pfads basierend auf dem aktuellen itemNode erhalten werden
    pprint ("KEN_ID = " + itemNode.find('.//fme:KEN_ID', ns).text.strip())
    #Wenn Sie die Punktliste erhalten möchten, beschreiben Sie den Pfad auf die gleiche Weise.
    pprint ("posList = " + itemNode.find('fme:MESH03622/gml:surfaceProperty/gml:Surface/gml:patches/gml:PolygonPatch/gml:exterior/gml:LinearRing/gml:posList', ns).text.strip())
    #Unterbrechen Sie die Arbeit, damit die Daten nicht zu stark fließen
    break

Es gibt verschiedene Möglichkeiten, es zu lesen, aber Sie können es mit dem relativen Pfad oder dem absoluten Pfad aus dem Lese-Tag angeben. Ich frage mich, ob ich so denken sollte.

Recommended Posts

Lesen Sie XML mit dem in Python angegebenen Namespace
Lesen Sie DXF mit Python
Analysieren Sie XML in Python
Lesen Sie Eulers Formel in Python
Lesen Sie Outlook-E-Mails mit Python
Lesen Sie die Fortran-Ausgabe mit Python
Lesen Sie die Protokollpufferdaten mit Python3
Lesen Sie PNG-Chunks in Python (Klassenausgabe)
Lesen Sie Dateien parallel zu Python
Erstellen und lesen Sie Messagepacks in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
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
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Plink in Python
Konstante in Python
Lesen und schreiben Sie JSON-Dateien mit Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit 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
Holen Sie sich mit Python die Niederschlagswahrscheinlichkeit aus XML
Bearbeiten Sie XML mit Namespaces in Python (Element Tree)
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
[Python] Lesen Sie die angegebene Zeile in der Datei
Hashbar in Python
DirectLiNGAM in Python
Lesen von Zeichen in Bildern mit Python OCR
LiNGAM in Python
In Python reduzieren
[Python] Daten lesen
In Python flach drücken
Lesen Sie eine Datei mit verstümmelten Linien in Python
Lesen Sie Tabellendaten in einer PDF-Datei mit Python