If anweisung

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.
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

If anweisung

Beitragvon abstract » Montag 10. Oktober 2005, 10:41

hi! also ich parse an einem xml für blender import rum und krieg die if-anweisung nicht gebacken !
also der Inhalt von n wird ausgegeben und das "TEST" nicht!
weiß jemand warum ?!

Code: Alles auswählen

for element in doc.getElementsByTagName("name"):

    n=element.firstChild.data
    print n
   
    if n == "Walther":
        print "TEST"


Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 10. Oktober 2005, 11:53

Wahrscheinlich ist n ein Objekt und kein String... Es geht bestimmt so:

Code: Alles auswählen

 if str(n) == "Walther":

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mbierenfeld
User
Beiträge: 39
Registriert: Donnerstag 9. Dezember 2004, 22:02
Wohnort: Muenchen

Beitragvon mbierenfeld » Montag 10. Oktober 2005, 12:02

Servus

Code: Alles auswählen


for book in dom.getElementsByTagName('book'):
    print "<tr>"

    for item in ['author','title','publisher']:

        node = book.getElementsByTagName (item)[0]
        td( getText(node.childNodes) )



Das Snipplet gibt dann

Code: Alles auswählen


<tr>
<th>Autor(en)</th><th>Titel</th><th> Verlag</th>
</tr>
<tr>
<td>Mark Lutz</td> <td>Programming Python</td> <td>O'Reilley</td>
</tr>
<tr>
<td>C. Jones F. Drake, Jr.</td> <td>Python XML</td> <td>O'Reilley</td>
</tr>



Also ich denke getText (node) ist die Lösung. Kann ich aber nicht verifizieren da ich Deine XML net kenne

michael
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Beitragvon abstract » Montag 10. Oktober 2005, 12:31

THANXX
hier mal was ich so habe. das mit str(n) funktioniert nicht und getText() auch irgendwie nicht.
ich bräucht ne anweisung die mir den Inhalt des tags untersucht und je nachdem ne scene rausrendert.
also wenn walther, öffne scene, setlayer, und render raus.
und wenn xy öffne andere etc..


P.S. der blender code geht ! und das xml kann ich gestalten wie ich will !

Code: Alles auswählen

from xml.dom.ext.reader.Sax2 import FromXmlStream

import sys
import Blender
from Blender import Scene

doc = FromXmlStream("c:/test.xml")

for element in doc.getElementsByTagName("name"):
    element.normalize()
    print "NAME: " + element.firstChild.data

  if getText(element.firstChild.data) == "Walther":

    scene = Blender.Load("C:/test.blend")
    sc=Scene.GetCurrent()
    sc.setLayers([2])
    sc.update()
    rc=sc.getRenderingContext()
    rc.renderAnim()
 


Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Re: If anweisung

Beitragvon jens » Montag 10. Oktober 2005, 12:43

abstract hat geschrieben:also der Inhalt von n wird ausgegeben und das "TEST" nicht!

Code: Alles auswählen

    n=element.firstChild.data
    print n
   
    if n == "Walther":
        print "TEST"


Als das print n liefert "Walther" ??? dann mach doch noch ein print type(n) und ein print str(n)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mbierenfeld
User
Beiträge: 39
Registriert: Donnerstag 9. Dezember 2004, 22:02
Wohnort: Muenchen

auch ??

Beitragvon mbierenfeld » Montag 10. Oktober 2005, 12:53

wenns nicht soviel ist gib mal bitte test.xml
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Beitragvon abstract » Montag 10. Oktober 2005, 12:54

ähhm also das print war nur zum testen. es geht um die if anweisung (siehe oben)

d.h. z.B. if n=="Walther": mach das und das, aber irgendwie gehts in dem kontext nicht obwohl sonstige if anweisungen gehen. überleg grad obs nicht am parsen liegt -> ob die daten im speicher gehalten werden ?!
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Beitragvon abstract » Montag 10. Oktober 2005, 12:56

Code: Alles auswählen

 
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <story>
- <owner>
  <gender>m</gender>
  <surname>Guenther</surname>
  <name>Walther</name>
  <ID>0</ID>
  </owner>
- <setting>
- <avatar>
  <a_name>Paul</a_name>
  <a_gender>m</a_gender>
  <hair>2</hair>
  <wear>17</wear>
  </avatar>
- <background>
- <picture>
  <url>stadium.jpg</url>
  </picture>
  </background>
  <storymodel>standard</storymodel>
  </setting>
  </story>
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 10. Oktober 2005, 12:57

abstract hat geschrieben:ähhm also das print war nur zum testen. es geht um die if anweisung (siehe oben)

Das ist schon klar :roll:

Es ist ja die Frage ob n wirklich das richtige liefert. So wie ich dich verstanden hab, hat print ja "Walther" ausgegeben, oder nicht?
Von daher scheint element.firstChild.data die richtigen Daten zu liefern.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Beitragvon abstract » Montag 10. Oktober 2005, 13:04

ja nur der if vergleich geht nett also das "TEST" kommt net.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 10. Oktober 2005, 13:05

und was brint ein print type(n) und ein print str(n) ???

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Beitragvon abstract » Montag 10. Oktober 2005, 13:09

also print type(n) gibt "unicode"
und
print str(n) gibt Walther

hängt es mit der unicode codierung und dem parsen zusammen !?
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 10. Oktober 2005, 13:14

Also bei mir geht's hiermit:

Code: Alles auswählen

from xml.dom.minidom import parse, parseString
doc = parse("test.xml")

for element in doc.getElementsByTagName("name"):
    element.normalize()
    print "NAME: " + element.firstChild.data
    print type(element.firstChild.data)

    if element.firstChild.data == "Walther":
        print "OK"


Die Ausgaben:

Code: Alles auswählen

NAME: Walther
<type 'unicode'>
OK

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mbierenfeld
User
Beiträge: 39
Registriert: Donnerstag 9. Dezember 2004, 22:02
Wohnort: Muenchen

Beitragvon mbierenfeld » Montag 10. Oktober 2005, 13:16

also das geht bei mir :

Code: Alles auswählen

from xml.dom.ext.reader.Sax2 import FromXmlStream

import sys

doc = FromXmlStream("test.xml")

for element in doc.getElementsByTagName("name"):
     element.normalize()

     data = element.firstChild.data
     print "NAME: " + data

     if data == "Walther":
         print "TEST"



Fragende Grüße. Ach ja getText schaut so aus :

Code: Alles auswählen


def getText(nodelist):
    lst = []

    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            lst.append(node.data)

    return ''.join(lst)



Michael
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Beitragvon abstract » Montag 10. Oktober 2005, 13:22

ich kotz gleich ! bei mir geht beides NET !

ich machs (mit SPE 0.7.3) auf und das "OK" und "TEST" kommen nicht

es geht nur wenn ich alles aus der xml lösche und nur

Code: Alles auswählen

<?xml version="1.0"?>
<name>Walther</name>

drin habe !!?

ich verstehe die fragenden grüße aber irgendwie ist hier bei mir irgendwas net in ordnung ! AAARRGGHHH[/code]
Zuletzt geändert von abstract am Montag 10. Oktober 2005, 14:11, insgesamt 1-mal geändert.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], mollyman