【发布时间】:2011-06-11 00:04:17
【问题描述】:
我有大量的 .xml 文件(大约 70 个),我需要从中提取一些坐标。 显然,最好的方法是使用元素树解析 xml 文件。我是 python 新手(非常非常新!)并且很难理解元素树附带的所有文档! 我想知道是否有人在他们使用过元素树的地方有任何代码,或者是否有人可以向我解释如何去做.. 谢谢!
这是我的 XML 文件中的一个示例..
<?xml version="1.0" encoding="UTF-8" ?>
- <lev:Leveringsinformatie xmlns:lev="http://www.kadaster.nl/schemas/klic/20080722/leveringsinfo">
<lev:Version>1.5</lev:Version>
<lev:Klicnummer>10G179900</lev:Klicnummer>
<lev:Ordernummer>0065491624</lev:Ordernummer>
<lev:RelatienummerGrondroerder>0000305605</lev:RelatienummerGrondroerder>
<lev:Leveringsvolgnummer>1</lev:Leveringsvolgnummer>
<lev:Meldingsoort>Graafmelding</lev:Meldingsoort>
<lev:DatumTijdAanvraag>2010-08-10T11:43:02.779+02:00</lev:DatumTijdAanvraag>
<lev:KlantReferentie>1207-0132-030 - 6</lev:KlantReferentie>
- <lev:Locatie axisLabels="x y" srsDimension="2" srsName="epsg:28992" uomLabels="m m">
- <gml:exterior xmlns:gml="http://www.opengis.net/gml">
- <gml:LinearRing>
<gml:posList>137800.0 484217.0 137796.0 484222.0 137832.0 483757.0 138178.0 483752.0 138174.0 484222.0 137800.0 484217.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</lev:Locatie>
- <lev:Pngformaat>
- <lev:OmsluitendeRechthoek xmlns:ns4="http://www.kadaster.nl/schemas/klic/20080722/madt" xmlns:bis="http://www.kadaster.nl/schemas/klic/20080722/klicnetbeheerdersinformatieservicetypes" xmlns:ns0="http://www.kadaster.nl/schemas/klic/20080722/gias" xmlns:ns7="http://www.kadaster.nl/schemas/klic/20080722/klicnetbeheerdersinformatieservicetypes" xmlns:madt="http://www.kadaster.nl/schemas/klic/20080722/madt" xmlns:gia="http://www.kadaster.nl/schemas/klic/20080722/gias" xmlns:klic="http://www.kadaster.nl/schemas/20080722/klic" xmlns:b="http://www.kadaster.nl/schemas/klic/20080722/bundelingtypes" xmlns:ns9="http://www.kadaster.nl/schemas/klic/20081010/bmkltypes" xmlns:gml="http://www.opengis.net/gml" xmlns:ns1="http://www.kadaster.nl/schemas/20080722/klic" xmlns:a="http://www.kadaster.nl/schemas/klic/20080722/bundelingservicetypes" xmlns:bmkl="http://www.kadaster.nl/schemas/klic/20081010/bmkltypes" xmlns:ns3="http://www.opengis.net/gml" xmlns:ns8="http://www.kadaster.nl/schemas/klic/20080722/knts">
- <gml:Envelope srsDimension="2" srsName="epsg:28992">
<gml:lowerCorner>137796 483752</gml:lowerCorner>
<gml:upperCorner>138178 484222</gml:upperCorner>
</gml:Envelope>
</lev:OmsluitendeRechthoek>
<lev:PixelsBreed>5348</lev:PixelsBreed>
<lev:PixelsHoog>6580</lev:PixelsHoog>
</lev:Pngformaat>
- <lev:NetbeheerderLeveringen>
- <lev:NetbeheerderLevering>
<lev:RelatienummerNetbeheerder>0000578695</lev:RelatienummerNetbeheerder>
<lev:Bedrijfsnaam>Gemeente Almere</lev:Bedrijfsnaam>
<lev:BedrijfsnaamAfkorting>Gemeente Almere</lev:BedrijfsnaamAfkorting>
我需要提取上下角坐标(lowerCorner/upperCorner)
更新:这是我的完整脚本:
from xml.etree import ElementTree as ET
import sys, string, os, arcgisscripting
gp = arcgisscripting.create(9.3)
workspace = "D:/J040083"
gp.workspace = workspace
for root, dirs, filenames in os.walk(workspace): # returms root, dirs, and files
for filename in filenames:
filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
filename_zero = filename_split[0]
extension = str.upper(filename_split[1])
try:
first_2_letters = str.upper(filename_zero[0] + filename_zero[1])
except:
first_2_letters = "XX"
if first_2_letters == "LI" and extension == ".XML":
tree = ET.parse(workspace)
print tree.find('//{http://www.opengis.net/gml}lowerCorner').text
print tree.find('//{http://www.opengis.net/gml}upperCorner').text
我现在收到错误:
消息文件名行位置
追溯
D:\J040083\TXT_EXTRACTION.py 32
解析 C:\Python25\Lib\xml\etree\ElementTree.py 862
解析 C:\Python25\Lib\xml\etree\ElementTree.py 579
IOError:[Errno 13] 权限被拒绝:'D:/J040083'
现在我真的很困惑,因为我可以使用与这个几乎完全相同的不同脚本访问这些文件!
【问题讨论】:
-
我们都在同一个页面上,你读过ElementTree documentation吗?这是一个参考文档,但整个页面都有一些示例。对于介绍,ElementTree Overview 页面也可能会有所帮助。
-
令人尴尬的是,我已经读过了!我只是不太明白..
-
@Alice:我建议您从要解析的 XML 文件中发布一个小的现实 sn-p 并指定您要访问的数据。您可以通过编辑自己的帖子来做到这一点。
-
我确实尝试过,但它只是出现在我的问题中,格式不正确。所以它没有 cmets,而是只有数字!
-
@Alice Duff - 如果您要使用 GML 做很多工作,那么我建议您阅读 XML。 GML 可能会变得相当复杂,您会很高兴整理出 XML 基础知识。我不能推荐任何教程,因为我已经有一段时间没有看过它们了,但要避免使用 W3Schools(与 W3 没有联系,实际上是编写规范!),因为它们经常不准确。这是第一个不是 W3Schools 的结果:learn-xml-tutorial.com
标签: python xml parsing elementtree