Seite 1 von 1

Google App und XML

Verfasst: Donnerstag 18. September 2008, 23:59
von debian75
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?

Re: Google App und XML

Verfasst: Freitag 19. September 2008, 00:12
von Leonidas
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.

Verfasst: Freitag 19. September 2008, 07:25
von sma
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

Verfasst: Freitag 19. September 2008, 08:38
von debian75
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>

Verfasst: Freitag 19. September 2008, 09:15
von Leonidas
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.

Verfasst: Freitag 19. September 2008, 09:21
von debian75
strange. imho ist das ja genau das gleiche....aber ich versuchts mal, danke.