sys.stdin und nur probleme

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
powerslide
User
Beiträge: 51
Registriert: Freitag 10. Dezember 2004, 09:05
Wohnort: Erlangen
Kontaktdaten:

Hi,

nachdem ich fast verzweifelt wäre hab ich nun was gefunden.. was mir bei meinem xml problem hilft.

Code: Alles auswählen

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

datei = "D:/Daten/test/test.xml"

infile = open(datei,'r')
inhalt = infile.read()

doc = FromXmlStream(sys.stdin)
#doc = FromXmlStream(inhalt)

walker = doc.createTreeWalker(doc.documentElement,          NodeFilter.SHOW_ELEMENT, None, 0)

while 1:
    #do something
    next = walker.nextNode()
    if next is None: break
so soweit sogut

mein problem liegt aber jetzt erstmal die datei überhaupt korrekt einzulesen.. ich hatte zuerst versucht das skript aufzurufen und dabei die datei auf stdin zu legen ( xml.py <datei.xml ) gab immer nen bad filedeskriptor fehler!

laut doku liest dies
doc = FromXmlStream(sys.stdin)
direkt aus einer offenen datei.. machts bei mir aber nicht
also inhalt als string gespeichert
und
doc = FromXmlStream(inhalt)
benutzt ..
naja.. liefert nen fehler weil er komischerweise versucht den string als url zu interpretieren

laut doku will die funktion als eingabe ein "file-like-object" oder nen string

ich glaub ich bin zu dumm für sowas..

kann mir das jemand mal erklären?

greetz

slide

:cry:
How many people can read hex if only you and dead people can read hex?

There are 10 types of people in the world: Those who understand binary, and those who don't...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Nur so eine Idee: Wenn die funktion ein file-like-object haben will, warum übergibst Du ihr dann nicht einfach infile?

Gruß, mawe
powerslide
User
Beiträge: 51
Registriert: Freitag 10. Dezember 2004, 09:05
Wohnort: Erlangen
Kontaktdaten:

is ja nicht so dass ich das nicht probiert habe..

aber rauskommen tut dann das
Traceback (most recent call last):
File "D:/Python24/Scripts/xmlWalker.py", line 14, in -toplevel-
doc = reader.fromStream(in_file)
File "D:\Python24\Lib\site-packages\_xmlplus\dom\ext\reader\Sax2.py", line 372, in fromStream
self.parser.parse(s)
File "D:\Python24\Lib\site-packages\_xmlplus\sax\expatreader.py", line 109, in parse
xmlreader.IncrementalParser.parse(self, source)
File "D:\Python24\Lib\site-packages\_xmlplus\sax\xmlreader.py", line 125, in parse
self.close()
File "D:\Python24\Lib\site-packages\_xmlplus\sax\expatreader.py", line 226, in close
self.feed("", isFinal = 1)
File "D:\Python24\Lib\site-packages\_xmlplus\sax\expatreader.py", line 220, in feed
self._err_handler.fatalError(exc)
File "D:\Python24\Lib\site-packages\_xmlplus\dom\ext\reader\Sax2.py", line 340, in fatalError
raise exception
SAXParseException: D:/Python24/Scripts/test.xml:1:0: no element found

:?

ach ja.. hier das verwendete xml-file
extrem einfach.. aber versuchsweise sollte das ja reichen

Code: Alles auswählen

<book lang="de">
	<title>Simulink Images</title>
	<bookinfo>
		<pubdate>04-Apr-2005 11:16:22</pubdate>
	</bookinfo>
</book>
How many people can read hex if only you and dead people can read hex?

There are 10 types of people in the world: Those who understand binary, and those who don't...
powerslide
User
Beiträge: 51
Registriert: Freitag 10. Dezember 2004, 09:05
Wohnort: Erlangen
Kontaktdaten:

ach ja .. mit minidom hab ichs evtl geschafft das teil einzulesen..
bin mir aber nich 100% sicher

das problem das dann auftritt ist:
Traceback (most recent call last):
File "D:/Python24/Scripts/xmlWalker.py", line 22, in -toplevel-
walker = doc.createTreeWalker(doc.documentElement, NodeFilter.SHOW_ELEMENT, None, 0)
AttributeError: Document instance has no attribute 'createTreeWalker'

zugehöriger code:

Code: Alles auswählen

import sys
import os
from xml.dom.minidom import parse
from xml.dom.NodeFilter import NodeFilter 

datei = "D:/Python24/Scripts/test.xml"

doc = parse(open(datei))

walker = doc.createTreeWalker(doc.documentElement, NodeFilter.SHOW_ELEMENT, None, 0) 

while 1: 
    print walker.currentNode.tagName 
    next = walker.nextNode() 
    if next is None: break
How many people can read hex if only you and dead people can read hex?

There are 10 types of people in the world: Those who understand binary, and those who don't...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Also wahrscheinlich liegts an meiner angeborenen Genialität, aber bei mir funktionierts :)

Code: Alles auswählen

datei = "test.xml"
infile = open(datei, 'r')
doc = FromXmlStream(infile)
Gruß, mawe
powerslide
User
Beiträge: 51
Registriert: Freitag 10. Dezember 2004, 09:05
Wohnort: Erlangen
Kontaktdaten:

ahhhhhh

Code: Alles auswählen

import sys
import os
from xml.dom.ext.reader.Sax2 import FromXmlStream
from xml.dom.NodeFilter import NodeFilter

datei = "test.xml" 
infile = open(datei, 'r') 
doc = FromXmlStream(infile)

walker = doc.createTreeWalker(doc.documentElement, NodeFilter.SHOW_ELEMENT, None, 0) 

while 1: 
    print walker.currentNode.tagName 
    next = walker.nextNode() 
    if next is None: break
und wieso geht das jetzt..

ich sach ma besten dank.. aber erklären kann ich mir das nicht

naja.. werd jezz ma n größeres xml-file laden..
ma sehn ob er das auch komplett ausgibt
How many people can read hex if only you and dead people can read hex?

There are 10 types of people in the world: Those who understand binary, and those who don't...
Antworten