Lire du XML avec un espace de noms spécifié en Python

L'histoire de la lecture de XML avec Python est arrivée, alors je l'ai étudiée. Certaines des balises XML que nous traitons sont au format namespace: nom_tiquette. Je n'ai pas bien trouvé la balise avec l'espace de noms, alors j'ai rassemblé le code.

Je n'ai pas ajouté l'exemple d'URL de code, je l'ai donc ajouté. Exemple de code

S'il s'agit de php, il peut être lu avec simplexml_load_string. Dans le cas de php, il est converti en namespace_tag_name, vous pouvez donc rechercher des nœuds sans vous en soucier.

En python, vous ne pouvez pas rechercher à moins de stocker l'espace de noms dans un tableau à l'avance et de transmettre le tableau d'espace de noms lors de l'exécution de la fonction de recherche.

C'est pourquoi comment lire du XML avec un espace de noms

Tout d'abord, extrayez le contenu du XML à lire. C'est la structure des balises.

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>

Script Python pour lire ce XML

ReadXMLSample.py


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

  #Enregistrez chaque espace de nom spécifié dans XML
  # xmlns:fme="http://www.safe.com/gml/fme"c'est'fme' : 'http://www.safe.com/gml/fme'Devient
  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()

  #Obtenir srsName de l'attribut
  pprint ("envelope = " + root.find('gml:boundedBy/gml:Envelope', ns).attrib['srsName'].strip())

  # gml:Je souhaite bénéficier de la fonctionnalité suivante
  fmeNodes = root.findall('gml:featureMember', ns)

  records = []
  for itemNode in fmeNodes:
    #Si vous voulez la valeur du nœud sous la racine, vous pouvez obtenir la valeur en décrivant le chemin à partir de la racine
    #N'oubliez pas de spécifier un tableau d'espaces de noms lorsque vous trouvez!
    pprint ("KEN_ID = " + itemNode.find('fme:MESH03622/fme:KEN_ID', ns).text.strip())
    #Peut être obtenu en spécifiant un chemin relatif basé sur l'élément itemNode actuel
    pprint ("KEN_ID = " + itemNode.find('.//fme:KEN_ID', ns).text.strip())
    #Si vous souhaitez obtenir la liste de points, décrivez le chemin de la même manière.
    pprint ("posList = " + itemNode.find('fme:MESH03622/gml:surfaceProperty/gml:Surface/gml:patches/gml:PolygonPatch/gml:exterior/gml:LinearRing/gml:posList', ns).text.strip())
    #Pause pour plus de commodité afin que les données ne circulent pas trop
    break

Il existe plusieurs façons de le lire, mais vous pouvez le spécifier avec le chemin relatif ou le chemin absolu de la balise de lecture. Je me demande si je devrais penser de cette façon.

Recommended Posts

Lire du XML avec un espace de noms spécifié en Python
Lire DXF avec python
Analyser XML en Python
Lire la formule d'Euler en Python
Lire les e-mails Outlook avec Python
Lire la sortie Fortran avec python
Lire les données des tampons de protocole avec Python3
Lire des morceaux PNG en Python (édition de classe)
Lire des fichiers en parallèle avec Python
Créer et lire des paquets de messages en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Plink en Python
Constante en Python
Lire et écrire des fichiers JSON avec Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Obtenez la probabilité de précipitation de XML avec Python
Manipuler XML avec des espaces de noms en Python (arbre des éléments)
Quad-tree en Python
Réflexion en Python
Chimie avec Python
[Python] Lire la ligne spécifiée dans le fichier
Hashable en Python
DirectLiNGAM en Python
Lire des caractères dans des images avec Python OCR
LiNGAM en Python
Aplatir en Python
[python] Lecture de données
Aplatir en python
Lire un fichier contenant des lignes brouillées en Python
Lire les données de la table dans un fichier PDF avec Python