XML - Element ersetzen
PeterK
- php
0 Thomas J.S.0 PeterK0 Thomas J.S.0 PeterK
Hallo.
Ich habe da ein Problem und keine richtige Lösung es zu Lösen.
Ich habe eine XML-Datei. In dieser Datei möchte ich alle include-Tags mit dem rückgabewert einer Funktion ersetzen. Alle anderen Tags sollen so weitergegebnen werden.
Vieleicht sollte ich noch sagen, das das Ergabniss danach durch den XSLT-Prozessor gejagt wird, aber das Ersetzen muss vor dem Parsen geschehen.
Ich hab es schon mit Sax-Handlern versucht aber das war nicht so das wahre. Ich habe schon daran gedacht evtl. mit RegExen zu arbeiten aber irgendwie bin ich schon zu müde.. ;P
Wenn jemand einen Tipp hat - raus mit! ;P
Peter
Hallo,
Ich habe eine XML-Datei.
So weit so gut.
»»In dieser Datei möchte ich alle include-Tags mit dem rückgabewert einer Funktion ersetzen.
Wie bitte? Was für include-Tags (meinst <include>???) was für Rückgabewert und was für Funktion? Und das allen in (einem) XML?
»»Alle anderen Tags sollen so weitergegebnen werden.
Wie "so" ?
Vieleicht sollte ich noch sagen, das das Ergabniss danach durch den XSLT-Prozessor gejagt wird, aber das Ersetzen muss vor dem Parsen geschehen.
Aha, aber irgendwie zwischen Bahnhof und chop sui ist es auch schon egal ;-)
aber irgendwie bin ich schon zu müde.. ;P
Ja und du bist zu sehr "drinn".
Worum geht es also?
Grüße
Thomas
Ja und du bist zu sehr "drinn".
Recht hast du...
Aaalso. Die XML-Datei enthält XML-Code (klar, was sonst) ;P. Dabei handelt es sich um eine Meta-Sprache, die später in XHTML-Output umgewandelt wird. Unter anderem gibt es auch einen, keinen oder mehrere Tags vom Schema
<include xmlfile="news.xml" xsltfile="news.xslt" />
An dieser stelle soll anstatt dieses Tags das Ergebnis der Transformation des XMLFiles über das XSLTFile. (Also ich jage das XML- und das XSLTFile über den XSLTProzessor und das ergebnis ersetzt dann den <include ...>-Tag. Dazu habe ich die Parserroutine in eine Klasse gesetzt.
$xd -> parse('cont/start.xml', 'style/xdoc.xslt');
Nun sollen vor der Anwendung der Transformation (xdoc.xslt) auf das Dokument (start.xml) alle <include ...>-Tags aus der start.xml durch das Ersetzt werden, was der Parser aus dem xml- und dem xslt-File macht, welche er dem Text entnimmt. Dazu wird für jedes gefundene include-Element eine neue Instanz dieser Klasse erstellt und mit dem Script und dem Parser gefüttert...
Es is ein nbisscehn schwehr zu erklären, aber im Prinzip Will ich z.B. aus der Startseite ein xslt-Script aufrufen, das das News-File in den Meta-Code übersetzt, der dann zu xhtml Transformiert wird.
Das ganze is im Prinzip kein Problem, ich brauche nur eine Technik, mit dem ich alle <include ...>-Tags durch das Ergebnis einer CallBack-Funktion, die die Attribute des Tags übergeben bekommt, ersetzt.
Wie gesagt habe ich es schon mit der SAX-Api probiert, aber da fehlt mir die Möglichkeit alles bis auf die includes zu ignorieren.
Ich werde es mal mit nem RegEx versuchen.
Wenn du ne bessere idee hast - raus mit ;P
Peter
Hallo,
Aaalso. Die XML-Datei enthält XML-Code (klar, was sonst) ;P. Dabei handelt es sich um eine Meta-Sprache, die später in XHTML-Output umgewandelt wird. Unter anderem gibt es auch einen, keinen oder mehrere Tags vom Schema
<include xmlfile="news.xml" xsltfile="news.xslt" />
An dieser stelle soll anstatt dieses Tags das Ergebnis der Transformation des XMLFiles über das XSLTFile. (Also ich jage das XML- und das XSLTFile über den XSLTProzessor und das ergebnis ersetzt dann den <include ...>-Tag. Dazu habe ich die Parserroutine in eine Klasse gesetzt.
$xd -> parse('cont/start.xml', 'style/xdoc.xslt');
Nun sollen vor der Anwendung der Transformation (xdoc.xslt) auf das Dokument (start.xml) alle <include ...>-Tags aus der start.xml durch das Ersetzt werden, was der Parser aus dem xml- und dem xslt-File macht, welche er dem Text entnimmt.
Ich glaube zu verstehen was du machen möchtest.
Aber weil ich ungern "programmiere" ;-) lasse ich mir solche Sachen, wenn es geht, vom XSLT selbst erledigen.
Also: ich würde bei so einem Fall versuchen in meiner xdoc.xsl mit der document()-Funktion zu arbeiten. D.h. die xdoc.xsl inkludiert mit document() die anderen xml dateien.
Ich habe hier http://forum.de.selfhtml.org/archiv/2003/8/55124/#m307314 zwei verschiedene Wege beschrieben wie man mehrere XML-Dateien zusammenführen kann.
Ich hoffe als Ansatz reicht dir das, wenn nicht bitte nochmal nachfragen.
Grüße
Thomas
Also das ganze soll ja *vor* dem XSLT-Stylesheet Passieren, denn das Inkludierte XML-File kann seinerseits wieder include-Tags verwenden... Also eine Rekusion. Ich habe es jetzt über 2 RegExe gelöst und es tut. Aber danke nochmal.
Peter