Hallo Leute!
Für eine Benchmark Analyse muss ich Daten aus XML-Dateien auswerten.
Die Ergebnisse möchte ich dann mit Hilfe von DocBOOK-XML auswerten, damit ein Report der Benchmark Analyse möglichste automatisch erstellt werden kann.
Leider hab ich noch nicht wirklich mit XML-Parsern gearbeitet.
Ich habe das Forum schon durchsucht, hab aber keinen für mich brauchbaren Hinweis für ein gutes und anfängerfreundliches SAX Tutorial gefunden. Hat wer einen Hinweis für mich, wo ich da was finden könnte?
Danke.
Johannes
Suche Anfängerfreundliches SAX Tutorial
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Vielleicht schaust du mal die DevShed Zutorials durch oder auch mal bei XML.com reingucken. Darüber hinaus gibt es auch noch das Buch Python & XML von O'Reilly.
Davon abgesehen ist SAX nicht gerade etwas, womit ich DocBook ganz sicher nicht parsen würde. Da spart mir DOM oder ETree viele Stunden mühseliger Arbeit.
Davon abgesehen ist SAX nicht gerade etwas, womit ich DocBook ganz sicher nicht parsen würde. Da spart mir DOM oder ETree viele Stunden mühseliger Arbeit.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Speicherschonender (da nicht der gesammte DOM-Tree im Speicher gehalten wird), ggf schneller (je nachdem wie du die SAX-Handler schreibst).keboo hat geschrieben:Hat SAX überhaupt wesentliche Vorteile gegenüber DOM?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo Leute!
Quelle des Codes: http://www.devshed.com/c/a/Python/Worki ... and-Python
Ich hätte da eine Frage bzgl. OOP in diesem Fall. Bin ein Newbie auf dem Gebiet.
Welche Aufgabe hat die Funktion characters? Was passiert in dieser Funktion? " # Called to handle content besides elements " verstehe ich nicht ganz.
Vollständigkeitshalber ist hier die XML Quelle:
Danke!
Johannes[/b]
Quelle des Codes: http://www.devshed.com/c/a/Python/Worki ... and-Python
Ich hätte da eine Frage bzgl. OOP in diesem Fall. Bin ein Newbie auf dem Gebiet.
Code: Alles auswählen
import xml.sax
# Create a collection list
collection = []
# This handles the parsing of the content
class HandleCollection ( xml.sax.ContentHandler ):
def __init__ ( self ):
self.book = {}
self.title = False
self.author = False
self.genre = False
# Called at the start of an element
def startElement ( self, name, attributes ):
if name == 'title':
self.title = True
elif name == 'author':
self.author = True
elif name == 'genre':
self.genre = True
# Called at the end of an element
def endElement ( self, name ):
if name == 'book':
collection.append ( self.book )
self.book = {}
elif name == 'title':
self.title = False
elif name == 'author':
self.author = False
elif name == 'genre':
self.genre = False
# Called to handle content besides elements
def characters ( self, content ):
if self.title:
self.book [ 'title' ] = content
elif self.author:
self.book [ 'author' ] = content
elif self.genre:
self.book [ 'genre' ] = content
# Parse the collection
parser = xml.sax.make_parser()
parser.setContentHandler ( HandleCollection() )
parser.parse ( 'collection.xml' )
Vollständigkeitshalber ist hier die XML Quelle:
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<collection>
<book>
<title>The Once and Future King</title>
<author>T.H. White</author>
<genre>Fantasy</genre>
</book>
<book>
<title>The Curse of Chalion</title>
<author>Lois McMaster Bujold</author>
<genre>Fantasy</genre>
</book>
<book>
<title>Paladin of Souls</title>
<author>Lois McMaster Bujold</author>
<genre>Fantasy</genre>
</book>
<book>
<title>Alas, Babylon</title>
<author>Pat Frank</author>
<genre>Fiction</genre>
</book>
<book>
<title>Rifles for Wattie</title>
<author>Harold Keith</author>
<genre>Fiction</genre>
</book>
</collection>
Johannes[/b]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Mach in die Funktion characters am Anfang ein print content, dann siehst du, wann und mit welchen Daten es aufgerufen ist.
Achja, bei der Gelegenheit kannst du den Code auch PEP 8 kompatibel machen (Forensuche nach PEP 8 gibt viele Informationen).
Achja, bei der Gelegenheit kannst du den Code auch PEP 8 kompatibel machen (Forensuche nach PEP 8 gibt viele Informationen).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Du solltest nicht einfach das Argument in das Dictionary übernehmen, sondern an den schon vorhandenen Text im Dictionary anhängen. Es ist nicht garantiert, dass der gesamte Inhalt zwischen zwei Tags in einem einzigen Aufruf von `characters()` übergeben wird.keboo hat geschrieben: Ich hätte da eine Frage bzgl. OOP in diesem Fall. Bin ein Newbie auf dem Gebiet.
[...]
Welche Aufgabe hat die Funktion characters? Was passiert in dieser Funktion? " # Called to handle content besides elements " verstehe ich nicht ganz.
`collections` würde ich in die Klasse verschieben und brauchst Du die Flags für die einzelnen Teile eines Buches unbedingt?