Seite 1 von 1

xml und "&<>", Sax

Verfasst: Samstag 4. Dezember 2004, 00:36
von Gast
Hy

Wenn ich den Saxparser füttere, dann ist eigentlich alles in ordnung, ich geh passend mit Umlauten und allem um. Nur wenn eines der XML-Sonderzeichen vorkommt, dann wird es dämlich, da kommt der Parser voll aus dem Tritt und steigt aus. Na gut, dachte ich mir so naiv, dann siehst du halt zu, dass in dem XML - File diese Zeichen entsprechend escaped sind, also & mit &amp und so weiter - denkste, der Sax steigt immer noch voll aus. Also die Frage: Wie geht das, das ich diese Zeichen in den Griff bekomme?

Thanx
Aron

Verfasst: Samstag 4. Dezember 2004, 00:37
von Aron Squander
:twisted: Mist, hat der mich doch glatt ausgelogt! Also der Gast da war ich....
Aron

Verfasst: Samstag 4. Dezember 2004, 00:54
von Dookie
Hi Aron,

ein kleines Beispiel aus einem XML-File von dir, wo der Parser aussteigt währ nett. Ansonst wenn du & durch &, < durch < und > durch > in Texten ersetzt hast sollte es gehen.


Gruß

Dookie

Verfasst: Samstag 4. Dezember 2004, 02:22
von Aron Squander
hmm
ersten fehler gefunden: man sollte auch das semikolon dazupacken, sonst nimmt er es nicht.
Ein Brocken aus dem XML-File ist:

Code: Alles auswählen

<book><author>Test1111 & Test2222</author>
der Spaß ist nur: er sollte ja dann
Test1111 & Test2222
als autor rausholen, ohne sonderzeichen tut er das auch. Jetzt liefert er nur noch Test2222, was wohl heisst, ich muss diese Fälle im Contenthandler noch abfangen, richtig? Oder passiert hier was ganz anderes?

Code: Alles auswählen

def characters(self, ch):
        if self.inBibtechType and self.inAttribute:
            self.originalRecord.setAttribute(self.currentTag, ch)
Ich denke er springt mit dem external Tag raus, womit es die Logik ziemlich zerreißt...
Aron

Verfasst: Samstag 4. Dezember 2004, 09:12
von Aron Squander
Ok
Also, das encoding problem kann man mit xml.sax.saxutils lösen, da gibt es eine Funktion encode, die in einem String die XML-Metazeichen codiert und den codierten String liefert. Also kein Thema.
Der von mir gepostete Codebroken funktioniert halt nicht, man muss die Characters zwischenspeichern und erst bei dem entsprechenden Endtag rausschreiben, dann geht es. Er spring also aus der Characters Funktion bei den XML-Metazeichen raus, wenn dann aber noch etwas kommt macht er auch genau da weiter.
Thanx for the Help
Aron

Verfasst: Samstag 4. Dezember 2004, 11:33
von Dookie
Hi nochmal,

ich hab selber noch nichts mit sax gemacht. Beim expat kann man ein Flag "buffer_text" angeben, damit er "Characterdata" buffert, also eben die von Entities gesplitteten Teile wieder zusammenführt bevor er die Daten an den entsprechenden Handler weiterleitet.


Gruß

Dookie

Verfasst: Samstag 4. Dezember 2004, 12:21
von Aron Squander
Der Sax hat eigetlich - zumindest langt das für das meiste - 3 routinen:
startTag
endTag
characters
Im Bezug auf XML eigentlich recht selbsterklärend. Jetzt muss man dem saxparser nur noch beibringen, was er machen soll, wenn er in eine der drei funktionen kommt. D.h. der Feed enthält ein Starttag, der Sax geht in die Starttag Funktion und führt sie aus. Von sich aus macht er nix, man muß ihm schon in die Funktion reinschreiben was zu tuen ist. Also ist die triviale Vorgehensweise einfach in StartTag Flags zu setzen, characters einfach einzulesen, und bei Endtag entscheiden, was man mit den characters macht und die entsprechenden Flags zurückzusetzt.

Cheers
Aron