XML-Tags via reguläre Ausdrücke löschen
Moderator: Moderatoren
XML-Tags via reguläre Ausdrücke löschen
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
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
Re: XML-Tags via reguläre Ausdrücke löschen
Hallo Cornacap,
versuche mal folgendes:
Hilft das weiter?
Jürgen
versuche mal folgendes:
Code: Alles auswählen
\user="*[:alpha:]?*\"
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
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: XML-Tags via reguläre Ausdrücke löschen
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.
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.

Re: XML-Tags via reguläre Ausdrücke löschen
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:
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?
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=
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?
Re: XML-Tags via reguläre Ausdrücke löschen
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:
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
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}
N.B. Kennst Du auch die Beschreibung der OOo-RegEx-Implementierung aus dem Entwickler-Wiki? - http://wiki.services.openoffice.org/wik ... _in_Writer
Re: XML-Tags via reguläre Ausdrücke löschen
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
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)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: XML-Tags via reguläre Ausdrücke löschen
Hallo und fröhliche Weihnachten!
@ Christian & Karo: vielen Dank, dass Ihr Euch trotz der Weihnachtszeit meines Problems angenommen habt
@ 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
@ Christian & Karo: vielen Dank, dass Ihr Euch trotz der Weihnachtszeit meines Problems angenommen habt

@ 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
Re: XML-Tags via reguläre Ausdrücke löschen
Guten Morgen und ebenfalls ein frohes Fest,
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.Cornacap hat geschrieben:danach kam noch mehr. Aber aus Datenschutzgründen (weil Daten eines Auftragsgebers) habe ich nicht alles mit notiert.
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.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 -