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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

Code: Alles auswählen

 if str(n) == "Walther": 

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

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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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)

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

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

ä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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

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

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

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

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

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.
mbierenfeld
User
Beiträge: 39
Registriert: Donnerstag 9. Dezember 2004, 22:02
Wohnort: Muenchen

*hehe* gaaanz ruhig ... mir ham montag. den source kannst Du 1 zu 1 aus dem Browser kopieren. geht .. 100%ig

spe == Stanis Python Editor ? Versurch mal das Script auf der Console oder "Dos"-Box (schluck) zu starten
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

in der Konsole gehts auch nicht !

ich glaub ich geh mal was kaputt machen !

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

AAAAARRGGHH !

SORRY SORRY !
habs endlich raus. und zwar hab ich die besch. xml im wordpad aufgemacht und der hat mir blanks reingehauen ergo-> der tag wurde zwar gefunden aber der vergleich ging net da ja der string aus blanks und tag bestand !

GNNNN
naja so kann man auch seinen montag verbringen !

Thanxx an alle

P.S. das coole ist ja noch, wenn man die xml im browser aufmacht sieht man keine blanks nur im texteditor ! deshalb hab ich des gar nicht mehr gesehen da ich sie danach nur im browser auf hatte !

man jetzt muss ich aber raus "!
Antworten