xml newb hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

BlackJack hat geschrieben:Du hast in dem gezeigten Beispiel *keine* Hochkommata in der Zeichenkette, allerdings einen Syntax-Fehler bei eben jenen:

Code: Alles auswählen

In [31]: Keywords = 'harry+potter'

In [32]: 'http://blablabla?Keywords='+Keywords+'&ItemPage='+ItemPage''
------------------------------------------------------------
   File "<ipython console>", line 1
     'http://blablabla?Keywords='+Keywords+'&ItemPage='+ItemPage''
                                                                 ^
<type 'exceptions.SyntaxError'>: invalid syntax
Bitte immer den Code zeigen, der auch zum Traceback geführt hat, sonst kann man nur raten wo denn das wirkliche Problem liegt.
ich denke nicht dass es daran liegt, warum würde er sonst resultate bringen, wenn ich nur ein wort eingebe ? ich denke das problem liegt hier:

Code: Alles auswählen

XMLSyntaxError: AttValue: " or ' expected, line 8, column 15 
jedenfalls hab ichs jetzt halt so geschrieben:

Code: Alles auswählen

"http://ecs.amazonaws.de/onca/xml?Service=AWSECommerceService&SearchIndex=Books&Keywords=%s&ItemPage=%s" % (Keywords,ItemPage)
das problem taucht nur auf, wenn ich in keywords mehr als ein wort eingebe und dies über GET bekomme. wenn ich harry+potter in die url hardcode geht es.

EDIT: wenn ich harcode in die url schreibe: keywords=harry potter, statt keywords=harry+potter, dann bekomme ich den gleichen fehler.

das problem könnte sein, dass die wörter die ich im formular übergebe nicht mit + zusammengekettet werden. nur warum ? weil in der url wirds mit + angezeigt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

debian75 hat geschrieben:das problem könnte sein, dass die wörter die ich im formular übergebe nicht mit + zusammengekettet werden. nur warum ?
Hast du sie denn mit `+` zusammengekettet? Wenn nicht dann ist deine Frage damit beantwortet: wenn du es nicht machst, wer dann?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

Leonidas hat geschrieben:
debian75 hat geschrieben:das problem könnte sein, dass die wörter die ich im formular übergebe nicht mit + zusammengekettet werden. nur warum ?
Hast du sie denn mit `+` zusammengekettet? Wenn nicht dann ist deine Frage damit beantwortet: wenn du es nicht machst, wer dann?
ne, hab ich nicht. ich kann mich aber auch nicht erinnern dass ich das je gemacht hätte. kann das sein, dass php das auch wieder automatisch macht ?

aber warum wird dann in der url keywords=harry+potter angezeigt ?

nun gut, wie geh ich das denn nun an ? den string in einzelne stücke zerteilen und diese mit + wieder zusammensetzen ?
Zuletzt geändert von debian75 am Dienstag 4. Dezember 2007, 23:01, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

debian75 hat geschrieben:ne, hab ich nicht. ich kann mich aber auch nicht erinnern dass ich das je gemacht hätte. kann das sein, dass php das auch wieder automatisch macht ?
Kann ich mir nicht vorstellen. Denn Leerzeichen werden in URLs normalerweise als `%20` enkodiert.
debian75 hat geschrieben:nun gut, wie geh ich das denn nun an ? den string in einzelne stücke zerteilen und diese mit + wieder zusammensetzen ?

Code: Alles auswählen

'+'.join(dein_string.split())
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

danke.

also ich hab grad in meiner php version nachgeschaut. wenn ich da im formular "harry potter" eingebe, wird das in der variable keywords and eine php funktion übergeben, die dann eine url öffnet. ich mache da keine "+" rein, das geht auch so.

könnte das ein unicode problem sein ? ich schnall nicht warum mir in der url die + angezeigt werden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

debian75 hat geschrieben:könnte das ein unicode problem sein ?
Nein, es hat was mit der Mondphase zu tun.

Bekomme ich jetzt ärger wenn ich keinen Smiley anhänge?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

Bekomme ich jetzt ärger wenn ich keinen Smiley anhänge?

aber hallo !
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also ausführlicher: Nein, es ist natürlich kein Unicode-Problem. Unicode ist dafür da, Zeichen in äquivalente Zeichen umzukodieren. Nicht umd Leerzeichen in Plus-Zeichen zu wandeln. Sind ja ganz verschiedene Dinge.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

neue frage:

von der ET website:
"find(pattern) returns the first subelement that matches the given pattern, or None if there is no matching element."
weiss jemand was mit "None" gemeint ist ?

ich hab: item.find("gaga").findtext("gugus")

wenn nun kein "gaga" vorhanden ist, gibts nen error, also hab ich flgendes versucht:

Code: Alles auswählen

if item.find("gaga") is None:
if item.find("gaga") is  'None':
if item.find("gaga") == None:
if item.find("gaga") == 'None':
hat aber alles nicht geholfen. da i der error meldung etwas von "NoneType" steht, hab ich selbiges mit "NoneType" statt "None" versucht aber ebenfalls ohne erfolg.

ich weiss jetzt nicht ob die mit None wirklich einen wert "None" meinen oder aber FALSE oder einen empty string.

gruss

d
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo debian75!

Funktioniert es so?

Code: Alles auswählen

gaga = item.find("gaga")
if gaga:
  gugus = gaga.findtext("gugus")
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

gerold hat geschrieben:Hallo debian75!

Funktioniert es so?

Code: Alles auswählen

gaga = item.find("gaga")
if gaga:
  gugus = gaga.findtext("gugus")
mfg
Gerold
:-)
weiss ned, kann leider erst heute abend versuchen, bin auf der arbeit ;-)

thnx for the hint

gruss

d
BlackJack

Mit `None` ist das gleichnamige Objekt gemeint. Die erste und dritte Variante der ``if``\s ist "richtig". Die Anführungsstriche weil Du sicher nicht testen wolltest ob es `None` ist, sondern ob es *nicht* `None` ist.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Erstere Variante würde auch gehen (und habe ich schon öfters zum Test auf None gesehen), denn None ist ein Singleton und damit kann man es auch auf Identität testen.

Edit: Sorry BlackJack, habe übersehen dass du die erste auch schon erwähnt hattest.
Zuletzt geändert von Leonidas am Mittwoch 5. Dezember 2007, 18:05, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Ich schrob doch erste und dritte. :-)
BlackJack

@debian75: Um nochmal das mit den '+' aufzugreifen: Das wird in der URL mit '+' angezeigt, ein '+' in den Parametern bedeutet aber Leerzeichen, dass hast Du ja schliesslich eingegeben und bekommst es dementsprechend im Python-Programm auch wieder mit Leerzeichen.

Wenn Du das dann einfach so zu einer Zeichenkette zusammensetzt, kommen die '+' da natürlich nicht auf magische Weise wieder hinein. Das gäbe einen ziemlichen Aufschrei wenn Python einfach in jede Zeichenkette '+' statt Leerzeichen schreiben würde. Du solltest vielleicht mal in die Doku schauen und die Parameter nicht selbst in die URL reinbasteln, sondern das zweite Argument von `urlopen()` verwenden. Da werden dann auch Leerzeichen entsprechend wieder als '+' kodiert.
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

BlackJack hat geschrieben:@debian75: Um nochmal das mit den '+' aufzugreifen: Das wird in der URL mit '+' angezeigt, ein '+' in den Parametern bedeutet aber Leerzeichen, dass hast Du ja schliesslich eingegeben und bekommst es dementsprechend im Python-Programm auch wieder mit Leerzeichen.

Wenn Du das dann einfach so zu einer Zeichenkette zusammensetzt, kommen die '+' da natürlich nicht auf magische Weise wieder hinein. Das gäbe einen ziemlichen Aufschrei wenn Python einfach in jede Zeichenkette '+' statt Leerzeichen schreiben würde. Du solltest vielleicht mal in die Doku schauen und die Parameter nicht selbst in die URL reinbasteln, sondern das zweite Argument von `urlopen()` verwenden. Da werden dann auch Leerzeichen entsprechend wieder als '+' kodiert.
hab das jetzt so gemacht, danke.
Antworten