Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Anfängerproblem

1 view
Skip to first unread message

Wendelin Uez

unread,
Jan 2, 2022, 11:54:57 AM1/2/22
to
Ich mache gerade meine ersten Schritte mit XML, bspw. möchte ich die Daten
von Windows-Kontakten (*.contact) auslesen und updaten.

Deren überschaubare Struktur ließ mich zuerst dran denken, die Dateien
selbst zu parsen und das Ganze wieder zurück zu schreiben. Wäre bei den
bekannten Tags nicht mehr als eine Fleißaufgabe, wäre da nicht das
potentielle Problem, daß so eine Datei eines Tages auch mal andere,
unbekannte Tags haben könnte, deren Datenstruktur ich respektive mein Parser
noch gar nicht kennt.

Ich bekomme dann zwar mit, daß jetzt ein unbekanntes Element <tagsowieso>
beginnt, aber wie erkenne ich, wo es endet, wenn ich die Struktur der
dazwischen liegenden Daten gar nicht kenne? Das abschließende </tagsowieso>,
das irgendwann im Datenstrom auftaucht, muß ja nicht zwangsweise genau das
zugehörige abschließende Tag sein, es könnte ja auch erst Teil eines
eingebetteten Texts einer unbekannten Datenstruktur sein, das gar nicht zu
interpretieren wäre.

Wie lösen andere Parser dieses Problem?

Ich könnte auch statt selbst zu parsen auf irgendwelche DLLs zurückgreifen,
die mir ein .xml-File parsen und Werte auslesen und wieder setzen lassen.
Allerdings kenne ich bislang noch keine (habe nur gelesen, daß es wohl in
Windows eine solche bereits gäbe), aber läßt sich damit die bekannte
Teilmenge an Tags extrahieren und updaten und danach die komplette Struktur,
die ja ansonsten unverändert bleibt, also incl. der "unverstandenen" Teile,
wieder zurückschreiben?

Peter J. Holzer

unread,
Jan 2, 2022, 4:39:26 PM1/2/22
to
On 2022-01-02 16:44, Wendelin Uez <wu...@online.de> wrote:
> Ich mache gerade meine ersten Schritte mit XML, bspw. möchte ich die
> Daten von Windows-Kontakten (*.contact) auslesen und updaten.
>
> Deren überschaubare Struktur ließ mich zuerst dran denken, die Dateien
> selbst zu parsen und das Ganze wieder zurück zu schreiben. Wäre bei
> den bekannten Tags nicht mehr als eine Fleißaufgabe,

Unterschätze XML nicht. Die Grund-Idee war zwar, das einfach parsebar zu
machen, aber wie das so ist, wenn ein Komitee eine Sprache entwirft, war
das Ergebnis dann doch nicht so einfach.

> wäre da nicht das potentielle Problem, daß so eine Datei eines Tages
> auch mal andere, unbekannte Tags haben könnte, deren Datenstruktur ich
> respektive mein Parser noch gar nicht kennt.
>
> Ich bekomme dann zwar mit, daß jetzt ein unbekanntes Element
> <tagsowieso> beginnt, aber wie erkenne ich, wo es endet, wenn ich die
> Struktur der dazwischen liegenden Daten gar nicht kenne? Das
> abschließende </tagsowieso>, das irgendwann im Datenstrom auftaucht,
> muß ja nicht zwangsweise genau das zugehörige abschließende Tag sein,
> es könnte ja auch erst Teil eines eingebetteten Texts einer
> unbekannten Datenstruktur sein, das gar nicht zu interpretieren wäre.

Nein, kann es nicht sein. Ein XML-File lässt sich immer eindeutig
parsen, auch wenn Du die Struktur nicht kennst. Das ist der große
Unterschied zu SGML.

> Wie lösen andere Parser dieses Problem?

Sie halten sich an die Spezifikation. Und wenn Du wirklich selbst einen
XML-Parser schreiben willst, würde ich auch sehr dazu raten, damit zu
beginnen, die Spezifikation zu lesen und nicht die Syntax auf Grund von
Beispielen und Baugefühl zu rekonstruieren.

> Ich könnte auch statt selbst zu parsen auf irgendwelche DLLs
> zurückgreifen, die mir ein .xml-File parsen und Werte auslesen und
> wieder setzen lassen. Allerdings kenne ich bislang noch keine (habe
> nur gelesen, daß es wohl in Windows eine solche bereits gäbe), aber
> läßt sich damit die bekannte Teilmenge an Tags extrahieren und updaten
> und danach die komplette Struktur, die ja ansonsten unverändert
> bleibt, also incl. der "unverstandenen" Teile, wieder zurückschreiben?

In welcher Programmiersprache willst Du das denn schreiben? In den
meisten Sprachen gibt es (mindestens) einen "Standard"-XML-Parser.

hp

Peter J. Holzer

unread,
Jan 2, 2022, 5:11:48 PM1/2/22
to
On 2022-01-02 16:44, Wendelin Uez <wu...@online.de> wrote:
> Ich mache gerade meine ersten Schritte mit XML, bspw. möchte ich die
> Daten von Windows-Kontakten (*.contact) auslesen und updaten.
>
> Deren überschaubare Struktur ließ mich zuerst dran denken, die Dateien
> selbst zu parsen und das Ganze wieder zurück zu schreiben. Wäre bei
> den bekannten Tags nicht mehr als eine Fleißaufgabe,

Unterschätze XML nicht. Die Grund-Idee war zwar, das einfach parsebar zu
machen, aber wie das so ist, wenn ein Komitee eine Sprache entwirft, war
das Ergebnis dann doch nicht so einfach.

> wäre da nicht das potentielle Problem, daß so eine Datei eines Tages
> auch mal andere, unbekannte Tags haben könnte, deren Datenstruktur ich
> respektive mein Parser noch gar nicht kennt.
>
> Ich bekomme dann zwar mit, daß jetzt ein unbekanntes Element
> <tagsowieso> beginnt, aber wie erkenne ich, wo es endet, wenn ich die
> Struktur der dazwischen liegenden Daten gar nicht kenne? Das
> abschließende </tagsowieso>, das irgendwann im Datenstrom auftaucht,
> muß ja nicht zwangsweise genau das zugehörige abschließende Tag sein,
> es könnte ja auch erst Teil eines eingebetteten Texts einer
> unbekannten Datenstruktur sein, das gar nicht zu interpretieren wäre.

Nein, kann es nicht sein. Ein XML-File lässt sich immer eindeutig
parsen, auch wenn Du die Struktur nicht kennst. Das ist der große
Unterschied zu SGML.

> Wie lösen andere Parser dieses Problem?

Sie halten sich an die Spezifikation. Und wenn Du wirklich selbst einen
XML-Parser schreiben willst, würde ich auch sehr dazu raten, damit zu
beginnen, die Spezifikation zu lesen und nicht die Syntax auf Grund von
Beispielen und Bauchgefühl zu rekonstruieren.

> Ich könnte auch statt selbst zu parsen auf irgendwelche DLLs
> zurückgreifen, die mir ein .xml-File parsen und Werte auslesen und
> wieder setzen lassen. Allerdings kenne ich bislang noch keine (habe
> nur gelesen, daß es wohl in Windows eine solche bereits gäbe), aber
> läßt sich damit die bekannte Teilmenge an Tags extrahieren und updaten
> und danach die komplette Struktur, die ja ansonsten unverändert
> bleibt, also incl. der "unverstandenen" Teile, wieder zurückschreiben?

Wendelin Uez

unread,
Jan 4, 2022, 1:35:47 PM1/4/22
to
Ich schrieb

>> Das
>> abschließende </tagsowieso>, das irgendwann im Datenstrom auftaucht,
>> muß ja nicht zwangsweise genau das zugehörige abschließende Tag sein,
>> es könnte ja auch erst Teil eines eingebetteten Texts einer
>> unbekannten Datenstruktur sein, das gar nicht zu interpretieren wäre.

Die Frage ist halt, wie kann man denn sicher sein, daß </tagsowieso> nicht
in einem nicht zu interpretierenden Teil des Datenstroms liegt, wenn man
nicht weiß, ob nach dem unbekannten <tagsowieso> nicht ein solcher folgen
kann?

retired developer

unread,
Jan 5, 2022, 8:41:45 AM1/5/22
to
On 03.01.22 19:37, Wendelin Uez wrote:

> Die Frage ist halt, wie kann man denn sicher sein, daß </tagsowieso>
> nicht in einem nicht zu interpretierenden Teil des Datenstroms liegt,


nun, die Antwort kam bereis von Peter J. Holzer, Zitat:

"Sie halten sich an die Spezifikation. Und wenn Du wirklich selbst einen
XML-Parser schreiben willst, würde ich auch sehr dazu raten, damit zu
beginnen, die Spezifikation zu lesen und nicht die Syntax auf Grund von
Beispielen und Baugefühl zu rekonstruieren."

Ein Beispiel zu Deinem Problem.
Angenommen, Du hast einen Tag, nennen wir es <query>, der IF-Argumente
enthaelt, also von einer Abfrage wie:

if ( (a < b) or (c > d) ) then { ... }

nehmen wir nur das Argument:

<query>( (a &lt; b) or (c &gt; d) )</query>


So auf die Schnelle, es sind 5 Zeichen, die auf jeden Fall durch ihr
jeweiliges Escape-Zeichen ersetzt werden muessen (falls ich mich noch
recht erinnere). Das sind dann:

" &quot; die Quote
' &apos; das Apostrophe
< &lt; das Kleinerzeichen (lt = less-then)
> &gt; das Groesserzeichen (gt = greater-then)
& &amp; das Et-Zeichen (Kaufmanns-Und)

Gruesse
Julius

--
An old Windows has old security holes.
A new Windows has new security holes.
Another OS has other security holes.
For safety you must care yourself.
0 new messages