cerhu > comp.lang.* > comp.lang.python

Vincent Pottier (12/04/2010, 12h19)
Bonjour,
J'essaie d'écrire un bout de code pour OpenStreetMap et je découvre
python.
J'aimerai analyser un fichier GPX avec XPath via libxml (qui devrait
permettre une utilisation fine de XPath).
(en gros, pour ceux que ça intéresse, il s'agit, dans une trace GPS faite
dans des transports en commun, de repérer les arrêts puis d'aller
chercher, via nominatim, ce qui existe dans OpenStreetMap, puis enfin
d'enrichir une base des horaires de transports)
Pour mes tests du langage python j'essaie dans un premier temps
d'extraire les tags 'ele'
Les contenus des fichiers sont ci-dessous.
En python 2.6 je ne parviens pas à un résultat :
//* me retourne la liste des n?uds mais
//ele ne renvoie rien

En python 3.1, j'ai l'erreur suivante :
Traceback (most recent call last):
File "./readGpx2.py", line 3, in <module>
import libxml2, sys
ImportError: No module named libxml2

Malgré mes recherches, je ne sais pas comment implémenter libxml pour
python 3.1 (bon je ne suis pas un as de la ligne de commande et de
linux ;-)

Je précise que dans jEdit (avec le plugin XSLT)
le xpath //ele retourne bien 10 n?uds.

Vos conseils seront les bien venus. Merci.

=====
Contenu du fichier 20100704.gpx
-----
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="" version="1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://
www.topografix.com/GPX/1/1/gpx.xsd">
<trk>
<name>ACTIVE LOG071934</name>
<trkseg>
<trkpt lat="48.697180" lon="2.194601">
<ele>33.823</ele>
<time>2010-04-07T05:19:34Z</time>
</trkpt>
</trkseg>
</trk>
<trk>
<name>ACTIVE LOG140024</name>
<trkseg>
<trkpt lat="48.697055" lon="2.195064">
<ele>124.733</ele>
<time>2010-04-07T12:00:24Z</time>
</trkpt>
<trkpt lat="48.697074" lon="2.195057">
<ele>108.986</ele>
<time>2010-04-07T12:01:08Z</time>
</trkpt>
<trkpt lat="48.697264" lon="2.194733">
<ele>100.121</ele>
<time>2010-04-07T12:01:54Z</time>
</trkpt>
<trkpt lat="48.697153" lon="2.195209">
<ele>100.608</ele>
<time>2010-04-07T12:02:17Z</time>
</trkpt>
<trkpt lat="48.697140" lon="2.195106">
<ele>102.053</ele>
<time>2010-04-07T12:02:37Z</time>
</trkpt>
<trkpt lat="48.697201" lon="2.194857">
<ele>103.222</ele>
<time>2010-04-07T12:03:17Z</time>
</trkpt>
<trkpt lat="48.697188" lon="2.194856">
<ele>107.266</ele>
<time>2010-04-07T12:04:40Z</time>
</trkpt>
<trkpt lat="48.697202" lon="2.194761">
<ele>102.466</ele>
<time>2010-04-07T12:05:46Z</time>
</trkpt>
<trkpt lat="48.697200" lon="2.194869">
<ele>103.805</ele>
<time>2010-04-07T12:07:37Z</time>
</trkpt>
</trkseg>
</trk>
</gpx>
-----
contenu du fichier readGpx.py
-----
#!/usr/bin/env python3.1

import libxml2, sys

# name = raw_input("File name ")
name = "20100407.gpx"
node = "*"
path = "//" + node

doc = libxml2.parseFile(name)
if doc.name != name:
print ("doc.name " + name + " failed")
sys.exit(1)

# root = doc.children
# if root.name != "gpx":
# print "root.name failed"
# sys.exit(1)
# else:
# print "root gpx found"

ctxt = doc.xpathNewContext()
res = ctxt.xpathEval(path)
print ("found " + str(len(res)) + " " + node + " at " + path)
for n in res:
#print "__" + str(n)
print (n.name)

doc.freeDoc()
ctxt.xpathFreeContext()
-----
Alain Ketterlin (12/04/2010, 14h16)
Vincent Pottier <vpottier> writes:

> En python 3.1, j'ai l'erreur suivante :
> Traceback (most recent call last):
> File "./readGpx2.py", line 3, in <module>
> import libxml2, sys
> ImportError: No module named libxml2


T'es sous linux, c'est ça ? Chez moi (ubuntu 9.10) il faut installer
cela à part, et ça s'appelle... python-libxml2.

Il y a aussi des exemples (et des conseils pertinents) à
[..]
mais j'imagine que tu as déjà vu cela.

-- Alain.
Vincent Pottier (12/04/2010, 14h57)
Le Mon, 12 Apr 2010 14:16:51 +0200, Alain Ketterlin a écrit :

> T'es sous linux, c'est ça ? ubuntu 9.10 aussi
> Chez moi (ubuntu 9.10) il faut installer
> cela à part, et ça s'appelle... python-libxml2.

C'est bien ce que j'ai compris.
Mais on trouve ça où ?
On l'installe comment ? et où ?
> Il y a aussi des exemples (et des conseils pertinents) à
> [..] mais
> j'imagine que tu as déjà vu cela.

Oui, mon test (sur python 2.6) vient de là.
De fait, "//*[name()='ele']" fonctionne (10 n?uds)
mais pas "//ele"
C'est un peu fastidieux !
NicolasP (13/04/2010, 09h13)
Bonjour,

[..]
> En python 2.6 je ne parviens pas à un résultat :
> //* me retourne la liste des n?uds mais
> //ele ne renvoie rien
> En python 3.1, j'ai l'erreur suivante :
> Traceback (most recent call last):
> File "./readGpx2.py", line 3, in<module>
> import libxml2, sys
> ImportError: No module named libxml2

Attention ! Python 3.x est différent de Python 2.x.
Le code écrit pour du Python 3.x est incompatible avec Python 2.x.
La majorité de la littérature existante est faite pour Python 2.x.

Nicolas
[..]
Discussions similaires
XPATH

Xpath et python 2.5

Mise à jour de la Python Quick Reference Card (tjs pour Python 2.4) (v0.67)

[DOM XPATH] comment effectuer une requete xpath avec DOM


Fuseau horaire GMT +2. Il est actuellement 00h33. | Privacy Policy