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).