XML sortieren mit XSL
fr@gma
- xml
Hallo,
ich habe hier ein Problem mit meinem XML-Dokument.
Ich möchte das Dokument nach dem Zeitstempel sortieren lassen.
Leider habe ich von XSLT gar keine Ahnung, also habe ich mir die Angaben aus verschieden Beispielen zusammen gebastelt.
Leider ist das XML jetzt nicht mehr lesbar, es kommt immer die Fehlermeldung:
XML-Verarbeitungsfehler: Kein Element gefunden
Adresse: file:///C:/Inetpub/wwwroot/strassenfest/Daten/gaestebuch.xml
Zeile Nr. 38, Spalte 8:</root>
-------^
Hier das XML-Dokument:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="yes" />
<xsl:template match="root">
<root>
<xsl:apply-templates select="eintrag">
<xsl:sort select="zeitstempel" data-type="number" order="ascending"/>
</xsl:apply-templates>
</root>
</xsl:template>
<xsl:template match="eintrag">
<xsl:copy-of select="."/>
</xsl:template>
<root>
<eintrag>
<name>test</name>
<ort></ort>
<zeitstempel>1216235820</zeitstempel>
<mail></mail>
<nachricht>testen</nachricht>
</eintrag>
<eintrag>
<name>mustermann</name>
<ort></ort>
<zeitstempel>1221672060</zeitstempel>
<mail></mail>
<nachricht>hier ein test</nachricht>
</eintrag>
<eintrag>
<name>muster</name>
<ort></ort>
<zeitstempel>1243426860</zeitstempel>
<mail></mail>
<nachricht>leer</nachricht>
</eintrag>
</root>
Könnte mir bitte mal jemand helfen?
Danke vorab.
Hallo fr@gma,
> <xsl:template match="eintrag">
> <xsl:copy-of select="."/>
> </xsl:template>
Hier fehlt </xsl:stylesheet>
zum Abschließen des XSLT-Stylesheets.
... und hier fängt das XML-Datendokument an:
> <root>
> ...
> </root>
Grüße,
Thomas
Hallo Thomas,
danke für Deine Hilfe
Ja, das war ein Fehler aber noch nicht der einzige.
Jetzt meckert der Parser wieder:
XML-Verarbeitungsfehler: "Junk" nach Dokument-Element
<root>
^
Stimmen denn die XSL-Anweisungen?
Und – ich habe das XSL in das zu bearbeitende XML-Dokument eingebunden.
Ist das so richtig, oder?
Viele Grüße
fr@gma
Hallo fr@gma,
Stimmen denn die XSL-Anweisungen?
Und – ich habe das XSL in das zu bearbeitende XML-Dokument eingebunden.
Ist das so richtig, oder?
Direkt im Browser eingebunden entsteht die Textausgabe:
test 1216235820 testen mustermann 1221672060 hier ein test muster 1243426860 leer
Standalone prozessiert (etwa mit Saxon) wird das gesamte XML-Dokument erzeugt.
Grüße,
Thomas
Direkt im Browser eingebunden entsteht die Textausgabe:
test 1216235820 testen mustermann 1221672060 hier ein test muster 1243426860 leerStandalone prozessiert (etwa mit Saxon) wird das gesamte XML-Dokument erzeugt.
Wirklich?
Bei mir kommt der genannte Fehler!
XML-Verarbeitungsfehler: "Junk" nach Dokument-Element
<root>
^
Oder müssen für XSL spezielle Interpreter aktiviert werden?
Danke für Deine Holfe
Gruß, fr@gma
Ich habe das XSL jetzt durch eine externe Datei eingebunden.
Jetzt funktioniert es.
Jedoch habe ich nun wieder ein Problem.
Ich möchte die XML-Datei mit SimpleXML auswerten.
Auch hier möchte ich auf die mit XSL sortierten Einträge zugreifen.
Leider werden hier die Einträge nicht wie gewünscht sortiert ausgegeben.
Hat jemand einen Tipp für mich?
Gruß, fr@gma
Ich konnte das Problem jetzt selbst lösen.
SimpleXML kann zumindest im Moment wohl kein XSL interpretieren.
Ich habe daher das XML-Dokument als DOM geladen, dann die XSL-Daten importiert und anschließend in ein SimpleXML-Object konvertiert.
$XMLfile = //Dateiname des XML-Dokumentes;
$XSLfile = //Dateiname des XSL-Dokumentes;
$xslDoc = new DOMDocument();
$xslDoc->load($XSLfile);
$xmlDoc = new DOMDocument();
$xmlDoc->load($XMLfile);
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
$xml = $proc->transformToDoc($xmlDoc);
$xml = simplexml_import_dom($xml);
Hoffentlich geht das irgendwann mal weniger umständlich.
Vielen Dank nochmal für alle Hilfestellungen!
Viele Grüße
fr@gma