Trickreich ist hier vor allem, das Ignorieren der character-Events hinzukriegen, damit nicht Daten aus ignorierten Elementen in unsere Ausgabe “reinbluten”.
In erster Näherung ist das zu erreichen, wenn man den Konstruktor so anfängt:
def __init__(self, interestingEls, scrwid=79, *args): ContentHandler.__init__(self, *args) self.ie = interestingEls self.scrwid = scrwid self.indentSize = 2
und dann in start- und endElement die Ausgabe jeweils durch
if name in interestingEls:
konditioniert. Um zu unterdrücken, dass Daten aus ignorierten Elementen “herausbluten”, muss dann in characters noch auf
if self.elementStack[-1] in interestingEls:
bedingt werden (hier sieht man ein Beispiel, in dem eine peek-Methode eines “echten” Stacks praktisch ist).