[Tustep-Liste] Geschachtelte Tags auflösen
Kuno Schälkle
schaelkle at zdv.uni-tuebingen.de
Mo Dez 13 09:28:06 CET 2010
Lieber Herr Stahl,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bei der Aufbereitung von XML-Dateien stoße ich immer wieder auf das
Problem, geschachtelte gleichnamige Tags auflösen zu müssen. Das sieht
in den Quelldaten beispielsweise so aus:
xx <add> aa <add> bb> <add> cc </add> bb </add> aa </add> xx
Wie kann ich herausfinden, welche Anfang- und Ende-Tags
zusammengehören? Wenn es gelänge, mit einem klassichen #KOPIERE daraus
xx <add1> aa <add2> bb <add3> cc </add3> bb </add2> aa </add1> xx
zu machen, könnte ich die Tags zuverlässig auflösen.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sie möchten eine Lösung mit #KOPIERE.
Für den Fall, dass Sie keine solche erhalten,
hier eine Lösung mit TUSCIPT:
$$! quelle, ziel
$$ MODE VARIABLE
SET status = CHECK (quelle, READ, TUSTEP)
ERROR/STOP "QUELLE: ", status
SET status = CHECK (ziel, WRITE, TUSTEP)
ERROR/STOP "ZIEL: ", status
ACCESS q: READ/STREAM/RECORDS "{quelle}" ...
s.z/u, atag+txt+etag, typ, stack
ACCESS z: WRITE/ERASE/STREAM "{ziel}" ...
s.z/u, atag+txt+etag, num
COMPILE
LOOP/999999
READ/EXIT q
IF (atag.HN."add") THEN
SET count = COUNT (stack, ":<<add>>:")
SET name = CONCAT ("add", count)
SET atag = SET_TAG_NAME (atag, name)
ENDIF
IF (etag.HN."add") THEN
SET count = COUNT (stack, ":<<add>>:")
SET name = CONCAT ("add", count)
SET etag = SET_TAG_NAME (etag, name)
ENDIF
WRITE z
ENDLOOP
ENDCOMPILE
ENDACCESS q
ENDACCESS z
Herzliche Gruesse
Kuno Schaelkle
Mehr Informationen über die Mailingliste Tustep-Liste