Hallo Stephan,
ein sehr interessantes Problem das Du da hast. Mal schaun ob ich dir auf meine Art und Weise behilflich sein kann.
Es ist eigentlich schade das Du keine Beispieldatei angehängt hast, aber auch so lässt sich damit arbeiten.
Der gepostete xml Inhalt ist so natürlich extrem schwer zu lesen. Also habe ich eine Blanko odt erstellt, entzippt, die content.xml durch deine Passage ersetzt, gespeichert, gezippt und dann in OOo 3.2.1 angeschaut. Dadurch bekam ich ein besseres Verständnis um was es geht, da ich jetzt ein Textdokument vor mir hatte.
Aber da fiel mir wieder ein, das dein xml Inhalt irgendwie komisch aussah. Also in den Optionen (Laden/Speichern Allgemein) nachgeschaut, und die Option "ODF Format auf Größe optimieren" das Häkchen rausgenommen. Danach gespeichert und dann das übliche entzippen und dann die content.xml mir noch mal angeschaut.
Für das anschauen solcher Dateien nehme ich immer wieder sehr gerne den Notepad++, allein schon wegen dem Syntax-Highlighting. Und auf einmal sah der Inhalt schon bedeutend besser aus, war viel leichter zu lesen. Doch ganz zufrieden war ich immer noch nicht, es fehlte eine Kleinigkeit. Und richtig! Es fehlte die Anzeige von Steuerzeichen, wie z.B. Zeilenumbruch (LF). Also diese Anzeige aktiviert, und "Taraaa!", schon besser. Und mit eingeschaltetem "Automatischem Zeilenumbruch" im Notepad++ war ich nun enlich zufrieden.
Hier jetzt mal ein Screenshot vom Notepad++

- xml-screenshot_0.png (89.12 KiB) 8330 mal betrachtet
was aber im praktischen Gebrauch viel zu unzuverlässig wäre weil es vorausetzt das das Ende des gesuchten Textes immer begrenzt wäre durch:
"/draw:frame><text:p"
schon ein zusätzliches Leerzeichen:
"/draw:frame> <text:p"
führt zum Versagen des regulären Ausdrucks.
Teilweise hast Du recht, aber teilweise hast Du auch unrecht.
Denn das ende vom Draw-Frame endet wohl immer mit "/draw:frame>", aber nicht immer folgt ein "<text:p". Es kann ja auch sofort ein neues Draw-Frame folgen, wie es im aktuellen der Fall ist "</draw:frame><draw:frame". Also da hast Du recht.
Aber ob das ein Leerzeichen ist, bezweifle ich jetzt doch mal im aktuellen Falle. Denn wie auf dem Screenshot (hoffentlich) zu sehen ist, ist das kein Leerzeichen sondern ein Zeilenumbruch.
Da habe ich eben gesehen, das es doch noch die Kombination "</draw:frame></text:p>" und zwar in einer Zeile gibt. Leider nicht auf dem Screenshot zu sehen.
Wie auch immer. Ich glaube eigentlich fest daran, das dieser Zeilenumbruch die Suche mittels reguläre Ausdrücke stört, irretiert.
Noch mal meine Beobachtung eindeutig zusammengefasst.
- Ein Draw-Frame beginnt immer mit "<draw:frame>" und endet immer mit "</draw:frame>".
- Auf das Ende eines Draw-Frame folgt mal ein weiteres Draw-Frame "</draw:frame><draw:frame", und zwar in der gleichen Zeile.
- Oder auf das Ende eines Draw-Frame "</draw:frame>" folgt ein Zeilenumbruch mit anschließendem "<text:p>".
- Oder aber auf das Ende eines Draw-Frame "</draw:frame>" folgt unmittelbar ein "<text:p>"
- Und ergänzend:
- Das Ende einer Draw-Frame Zeile endet entweder mit "draw:z-index="0">" plus Zeilenumbruch.
- Oder es endet mit "draw:z-index="2"><draw:image/>" plus anschließendem Zeilenumbruch.
Daraus folgt dann, das ich aus dieser deiner Aussage nicht wirklich schlau werde:
In "Abschnitt B" müssen alle "<draw:frame [...]> [...] </draw:frame>" gefunden und zur weiteren Bearbeitung zwischengespeichert werden.
Der Beginn von "Abschnitt B" ist begrenzt durch das erste Auftauchen von "<draw:frame [...]>" und das Ende ist unmittelbar vor dem ersten Aufttauchen von "<text:p [...]>" (auf gleicher Hirarchieebene wie "<draw:frame [...]>").
Denn was willst Du nun wirklich genau?
- Willst Du alle Draw-Frames?
- Oder willst Du nur die Draw-Frames die vor einem "<text:p [...]>" stehen, egal ob mit vorherigem Zeilenumbruch oder ohne?
Ist alles ein wenig irretierend, so das ich jetzt selbst den Überblick verloren habe.
Aber vielleicht solltest Du deine Suchstrategie irgendwie überdenken, und zwar so, das auch Zeilenumbrüche mit berücksichtigt werden.
Vielleicht konnte ich dir eine andere Sicht auf die Lage verschaffen.
Gruß
balu