Google App und XML

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

google unterstützt kein lxml und Element Tree keine Namespaces, sehe ich das richtig?

weil wenn ich sowas hier mache:

Code: Alles auswählen

ns = "{%s}" % root.nsmap[None]

geht mal gar nix. ich muss aber ns haben um die nodes zu finden :( jemand eine idee? vielleicht minidom?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

debian75 hat geschrieben:google unterstützt kein lxml und Element Tree keine Namespaces, sehe ich das richtig?
Soweit ich mich erinnern kann unterstützt es durchaus die Clarke-Notation der XML-Namespaces.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

ElementTree kann Namensräume verarbeiten, speichert aber offenbar nicht, wie die Kürzel waren, sondern man muss immer die `{uri}`-Form oder ein `QName`-Objekt benutzen. Sie können damit nicht wieder hergestellt werden, was lästig und IMHO ein Armutszeugnis ist.

Code: Alles auswählen

>>> from xm.etree.ElementTree import *
>>> e = XML('<a:test xmlns:a="urn:sma"><a:b a:c="a">Hallo</a:b></a:test>')
>>> print e.find('{urn:sma}b').attrib[QName('urn:sma', 'c')]
a
>>> dump(e)
<ns0:test xmlns:ns0="urn:sma"><ns0:b ns0:c="a">Hallo</ns0:b></ns0:test>
Stefan
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

Hmmm. Also ich will so ne Amazon XML lesen. Durch Hilfe hier aus dem Forum habe ich es sogar geschafft. Dazu musste ich erst mal das hier machen:

Code: Alles auswählen

1. ns = "{%s}" % root.nsmap[None]
Jetzt kann ich ganz normal das XML durchsuchen, indem ich das "ns" voransetze:

Code: Alles auswählen

2. items.findall(ns + "Item"):
Mein Problem ist jetzt, dass das leider nur mit lxml klappt, was ich bei Google aber nicht zur Verfügung habe :(

Das XML sieht ca. so aus:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2007-07-16">
<SearchIndex>Books</SearchIndex></ItemSearchRequest></Request><TotalResults>202</TotalResults><TotalPages>21</TotalPages>
<Items>
<Item><ASIN>3280072026</ASIN>
<DetailPageURL>http://blabla.com</DetailPageURL>
<SalesRank>80350</SalesRank>
<SmallImage><URL>http://ecx.images-amazon.com/images/I/41xH5WePMML._SL75_.jpg</URL></SmallImage>
</Item></Items></ItemSearchResponse>
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also nachdem ich mal das XML angepasst habe, so dass es auch wohlgeformtes XML ist (also die schließenden Tags die kein Anfangstag haben entfernt habe), funktioniert das bei mir:

Code: Alles auswählen

doc.findall("*//{http://webservices.amazon.com/AWSECommerceService/2007-07-16}Item")
Wobei ``doc`` eben das geparste Dokument ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

strange. imho ist das ja genau das gleiche....aber ich versuchts mal, danke.
Antworten