Seite 1 von 1

XML Problem

Verfasst: Dienstag 27. Juli 2004, 15:27
von Hanman
Ich möchte von den beiden folgenden Elementen die einzelnen Argumente auslesen :
<pic id="1" by="Hanmam" tit="Fak"></pic>
<pic id="2" by="Hanmam" tit="Fakk"></pic>

Ich ahbe schon einen Code geschrieben, der das erste Elemnt bfasst, aber wenn dieses abgearbeitet ist gibt es eine Fehlermeldung :
Traceback (most recent call last):
File "C:/up/parser.py", line 11, in -toplevel-
parser.parse('links.xml')
File "C:\Python23\lib\xml\sax\expatreader.py", line 107, in parse
xmlreader.IncrementalParser.parse(self, source)
File "C:\Python23\lib\xml\sax\xmlreader.py", line 123, in parse
self.feed(buffer)
File "C:\Python23\lib\xml\sax\expatreader.py", line 211, in feed
self._err_handler.fatalError(exc)
File "C:\Python23\lib\xml\sax\handler.py", line 38, in fatalError
raise exception
SAXParseException: links.xml:2:0: junk after document element


Gibt es vielleicht eine Funktion, die alle Elemente "scanned"?

Gruß Hanman

Verfasst: Dienstag 27. Juli 2004, 15:58
von Dookie
Hi Hanman,

mach erstmal eine xml-Datei daraus:

Code: Alles auswählen

<?xml version="1.0"?>
<PicList>
	<pic id="1" by="Hanmam" tit="Fak"></pic>
	<pic id="2" by="Hanmam" tit="Fakk"></pic>
</PicList>
Erstmal kommt die Zeile, die eine xml-Datei definiert und dann müssen Elemente in der Datei immer in ein Element eingeschlossen sein!

Dann könntest Du mein Modul XML_Objects verwenden:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys

from XML_Objects import XML_Object, XML_Root


class Picture(XML_Object):
    __slots__ = {"id" : int, "by" : str, "tit" : str}
    xml_tag_name = "pic"

    def __init__(self, *args, **kw):
        super(Picture, self).__init__(*args, **kw)
        self.id = kw.pop("id", -1)
        self.by = kw.pop("by", "me")
        self.tit = kw.pop("tit", "")

class PicList(XML_Root):
    __slots__ = {}


if len(sys.argv) < 2:
    print "usage: sys.argv[0] <xml-file>"
    sys.exit(0)

my_pics =XML_Object.load(sys.argv[1])
for entry in my_pics.xml_get_children():
    print "id: %i, title: %s, by: %s" % (entry.id, entry.tit, entry.by)

Gruß

Dookie

Verfasst: Dienstag 27. Juli 2004, 16:00
von Milan
HI. Meine Glaskugel ist heute nicht gut --- ich hab nur ein verschwommenes Bild davon, was gemacht wird... kannst du bitte ein wenig Code geben, wie dein Parser aussieht?

Verfasst: Dienstag 27. Juli 2004, 16:07
von Hanman
Das XML Dokument ist schon wohlgeformt, ich hab allerdings nur die 2 Zeilen code gepastet. Leidr werde ich dein Modul nicht nutzen können, da ich nicht denke, das mein Provider es mir installiert :(

Gruß Hanman

Verfasst: Dienstag 27. Juli 2004, 16:16
von Dookie
Hi Hanman,

das kannst auch selber installieren, braucht ja nur im Pythonpfad zu liegen oder im aktuellen Verzeichnis.


Gruß

Dookie

Verfasst: Dienstag 27. Juli 2004, 16:30
von joe
Hanman hat geschrieben:Das XML Dokument ist schon wohlgeformt,
Hm, das ist erstaunlich. Die Fehlermeldung kann eigentlich nur kommen, wenn hinterm root-element noch was steht. Ist da vielleicht noch irgendein "verrücktes" unsichtbares zeichen (Steuerzeichen für irgenwas)?
Joe

Verfasst: Dienstag 27. Juli 2004, 16:37
von Hanman
so ich hab jetzt mal geschaut und gemerkt das ich da noch ein > zuviel hatte!

geht jetzt alles danke :)

Gruß Hanman

Verfasst: Dienstag 27. Juli 2004, 17:03
von fs111
Dookie hat geschrieben:Hi Hanman,

Erstmal kommt die Zeile, die eine xml-Datei definiert und dann müssen Elemente in der Datei immer in ein Element eingeschlossen sein!
Die XML-Deklaration ist aber optional lt. Standard, kann also weggelassen werden.

fs111