XML-Tags via reguläre Ausdrücke löschen

Das Textverarbeitungsprogramm

Moderator: Moderatoren

Cornacap
Beiträge: 7
Registriert: Mi, 16.08.2006 12:59

XML-Tags via reguläre Ausdrücke löschen

Beitrag von Cornacap »

Hallo,
ich suche jetzt schon eine ganze Weile herum, komme aber nicht weiter.
Ich möchte ein umfangreiches XML-Dokument mit Writer bearbeiten, mit dem Ziel dort für mich überflüssige Tags/Attribute zu löschen (konkret: ich möchte eine osm-Datei schlanker machen, damit ich sie z.B. in Kosmos besser laden kann...).

Hier ein Ausschnitt daraus:
<node id="172539" timestamp="2007-04-30T22:04:49Z" user="Elwood" lat="52.5652117" lon="13.335509">
<tag k="created_by" v="YahooApplet 1.0"/>
</node>


Ich möchte jetzt einfach user="Elwood" und alle anderen user= löschen. Über Suchen&Ersetzen mit aktivierten regulären Ausdrücken habe ich user=".*" eingegeben.

Das Resultat:
Alle user= wurden auch schön gelöscht. Leider auch alle Koordinaten(lat="52.5652117" lon="13.335509"):
<node id="172539" timestamp="2007-04-30T22:04:49Z" >
<tag k="created_by" v="YahooApplet 1.0"/>
</node>


Ich habe mich auch schon reichlich in der Hilfe umgesehen und in den dort angegebenen Links, komme aber irgendwie nicht weiter. Ich denke mal ich habe da was mit den doppelten Anführungszeichen nicht richtig verstanden (?).
Weiß von Euch einer, wie ich das gewünschte Attribut löschen kann, ohne den Rest gleich mit?
Vielen Dank,
CC
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: XML-Tags via reguläre Ausdrücke löschen

Beitrag von turtle47 »

Hallo Cornacap,

versuche mal folgendes:

Code: Alles auswählen

\user="*[:alpha:]?*\"
Hilft das weiter?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Cornacap
Beiträge: 7
Registriert: Mi, 16.08.2006 12:59

Re: XML-Tags via reguläre Ausdrücke löschen

Beitrag von Cornacap »

Hallo Jürgen,
vielen dank für Deine Antwort! Ja, mit Deinem Vorschlag hat es gerade geklappt. Ich muss mir wohl doch nochmal ganz in Ruhe die Logik der regulären Ausdrücke beibringen, um dass später in ähnlichen Fällen zu rekonstruieren.

Ein immer noch irritierter CC - der jetzt aber schon ein ganzes Stück weiter ist. :D
Cornacap
Beiträge: 7
Registriert: Mi, 16.08.2006 12:59

Re: XML-Tags via reguläre Ausdrücke löschen

Beitrag von Cornacap »

Hallo,
Jürgens Vorschlag hatte nur einen Haken: Namen mit Leerzeichen und Bindestrich blieben erhalten. Ich habe dann folgenden Ausdruck verwendet, um alles zu löschen (Anfang: Z\"[:space:] und Ende [:space:]lat= waren immer gleich):

Z\"[:space:]?.*\"[:space:]lat=

ich bin jetzt weiter und schon bei einer neuen XML-Datei (kein OSM) angelangt - mit neuen Probemen. Ich habe ein Attribut namens cla= mit Zahlen - mal eine, mal mehrere Zahlen jeweils mit Leerzeichen getrennt. Und: mal folgt ein neues Element, mal eine Attribut:

Code: Alles auswählen

cla="4 6 16"><address

cla="6"><address

cla="4 6 16" sorting

cla="4 3 2 1 5 6 8 14 17 16" sorting

cla="4 6 16" cli=
Ich habe schon einiges ausprobiert:

cla=\".*\">: findet nur Attribute mit 4 Werten
cla=\".*\": findet noch den ganzen Rest eines Elements
cla=\"[0-9]*[:space:]?[0-9]*[:space:]?[0-9]*\": findet nur 3er-Zahlengruppen (z.B.: cla="4 6 16")

In verschiedenen deutsch- und englischsprachigen Referenzen finde ich keinen Hinweis darauf, wie ich mal variable Zahlenruppen wie hier über reguläre Ausdrücke finden kann.
Lohnt sich hier der Einsatz von Suchen&Ersetzen überhaupt oder sollte ich gleich alles über XSLT erledigen?
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: XML-Tags via reguläre Ausdrücke löschen

Beitrag von chrk »

Hallo Corncap,
variable Anzahlen eines Suchbegriffs findest Du mit Zahlen in geschweiften Klammern: {2} findet genau zwei, {1,2} findet eins oder zwei, {1,} findet mindestens eins. Das findest Du so in der Hilfe in der Liste der regulären Ausdrücke.

Für Deine Beispiele heißt das:

Code: Alles auswählen

cla=".*">{0,1}[:space:]{0,1}
findet alle cla-Elemente mit ihren Anfürungszeichen, höchstens einer ausführenden Klammer und höchstens einem folgenden Leerzeichen.

N.B. Kennst Du auch die Beschreibung der OOo-RegEx-Implementierung aus dem Entwickler-Wiki? - http://wiki.services.openoffice.org/wik ... _in_Writer
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: XML-Tags via reguläre Ausdrücke löschen

Beitrag von Karolus »

Hallo
cla="[^"]*"
[^"]* hat die Bedeutung: "beliebig viele Zeichen die nicht ein " sind"

falls ausführende Klammer oder Leerzeichen am Ende mit gefunden werden sollen müsste doch:
cla="[^"]*"[>| ]
reichen ?
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Cornacap
Beiträge: 7
Registriert: Mi, 16.08.2006 12:59

Re: XML-Tags via reguläre Ausdrücke löschen

Beitrag von Cornacap »

Hallo und fröhliche Weihnachten!
@ Christian & Karo: vielen Dank, dass Ihr Euch trotz der Weihnachtszeit meines Problems angenommen habt :D

@ Christian: den Link zu den regulären Ausdrücken habe ich mir schon viele Male durchgelesen (und noch andere Links - z.B. die, die am Ende des Artikels angeführt sind). Aber ich scheine mit der Logik des Systems ein Problem zu haben. Vielleicht sollte man für Personen wie mich mal einen Pool von weiteren Fallbeispielen anlegen (z.B. meine).
Leider bin ich mit Deinem Konstrukt nicht weitergekommen. Damit habe letztendlich den ganzen folgenden Rest des Elements mit ausgewählt. Ich hatte nur aus Ausschnitte des mich interessierenden Bereichs gezeigt - danach kam noch mehr. Aber aus Datenschutzgründen (weil Daten eines Auftragsgebers) habe ich nicht alles mit notiert.

@Karo:
mit cla="[^"]*" hatte es auf anhieb geklappt! Schön. Und auch noch so wenig zu tippen.

Schöne Feiertage!
CC
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: XML-Tags via reguläre Ausdrücke löschen

Beitrag von chrk »

Guten Morgen und ebenfalls ein frohes Fest,
Cornacap hat geschrieben:danach kam noch mehr. Aber aus Datenschutzgründen (weil Daten eines Auftragsgebers) habe ich nicht alles mit notiert.
Das ist löblich, ich hatte hier schon mal einen Dateianhang mit Abrechnungen für Kundendomains (mit Domainnamen und Registrar) auf dem Schirm, das war mir dann eine PN wert.
Leider bin ich mit Deinem Konstrukt nicht weitergekommen. Damit habe letztendlich den ganzen folgenden Rest des Elements mit ausgewählt. Ich hatte nur aus Ausschnitte des mich interessierenden Bereichs gezeigt -
Ja, mein Ausdruck wählt alle Zeichen bis zum letzten Anführungszeichen plus der optionalen Klammer und/oder Leerzeichen in der Zeile aus. Karos Trick mit dem Ausschließen von Anführungszeichen, um nur bis zum nächsten Anführungszeichen auszuwählen, habe ich auch irgendwann mal von Karo gelernt, aber so weit habe ich dann am konkreten Beispiel dann (mal wieder) nicht gedacht.
Antworten