Seite 1 von 1
XML-Tags via reguläre Ausdrücke löschen
Verfasst: Sa, 20.12.2008 18:33
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
Re: XML-Tags via reguläre Ausdrücke löschen
Verfasst: Sa, 20.12.2008 20:10
von turtle47
Hallo Cornacap,
versuche mal folgendes:
Hilft das weiter?
Jürgen
Re: XML-Tags via reguläre Ausdrücke löschen
Verfasst: Sa, 20.12.2008 21:21
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.

Re: XML-Tags via reguläre Ausdrücke löschen
Verfasst: Mi, 24.12.2008 00:33
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?
Re: XML-Tags via reguläre Ausdrücke löschen
Verfasst: Mi, 24.12.2008 09:28
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:
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
Re: XML-Tags via reguläre Ausdrücke löschen
Verfasst: Mi, 24.12.2008 09:32
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
Re: XML-Tags via reguläre Ausdrücke löschen
Verfasst: Mi, 24.12.2008 22:44
von Cornacap
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
Re: XML-Tags via reguläre Ausdrücke löschen
Verfasst: Do, 25.12.2008 09:50
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.