パイクラおじさんの日記

MinecraftでPythonを勉強するおじさんの日記です。

XMLパーサー

PythonXMLパーサーをググると、これが見つかりました。

20.5. xml.etree.ElementTree — ElementTree XML API — Python 3.6.1 ドキュメント

まずはこのXMLをパースして<gml:tupleList>を見つけて、中のテキストを取り出す(だけの)プログラム(xmlparse.py)を書いてみました。

# coding: utf-8

import xml.etree.ElementTree as ET

GEO_DIR = "FG-GML-5340-22-DEM5A"
GEO_XML = "FG-GML-5340-22-00-DEM5A-20161001.xml"

tree = ET.parse(GEO_DIR+"/"+GEO_XML)
root = tree.getroot()

tl = root.find('./{http://fgd.gsi.go.jp/spec/2008/FGD_GMLSchema}DEM/{http://fgd.gsi.go.jp/spec/2008/FGD_GMLSchema}coverage/{http://www.opengis.net/gml/3.2}rangeSet/{http://www.opengis.net/gml/3.2}DataBlock/{http://www.opengis.net/gml/3.2}tupleList')
if tl is None:
    print("{http://www.opengis.net/gml/3.2}tupleList is not found")
    exit(-1)

print(tl.text)

最初、root.findがもっと深く探してくれるんだと思っていたら全然見つけてくれなくて、<gml:tupleList>までの階層を全部指定する必要がある事がわかるまで随分悩んでしまいました。しかも、名前空間も指定しないといけないとか。

20.5. xml.etree.ElementTree — ElementTree XML API — Python 3.6.1 ドキュメント

あと、Pythonは文字列の連結に".(ピリオド)"が使えない。