Seite 1 von 1

sys.stdin und nur probleme

Verfasst: Mittwoch 27. April 2005, 14:36
von powerslide
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:

Verfasst: Mittwoch 27. April 2005, 14:49
von mawe
Hi!

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

Gruß, mawe

Verfasst: Mittwoch 27. April 2005, 14:54
von powerslide
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>

Verfasst: Mittwoch 27. April 2005, 15:06
von powerslide
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

Verfasst: Mittwoch 27. April 2005, 15:08
von mawe
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

Verfasst: Mittwoch 27. April 2005, 15:15
von powerslide
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