aussagekräftige Fehlermeldungen bei Umwandlung mit PHP
Bene
- xsl
Hallo,
ich führe mit folgender Methode die XSLT-Transformation durch.
public static function transformXML($doc, $stylesheetLocation, $paramsArr) {
$stylesheet = file_get_contents($stylesheetLocation);
$docXSLT = new DOMDocument('1.0', 'UTF-8');
$docXSLT->resolveExternals = true;
$docXSLT->substituteEntities = true;
$docXSLT->loadXML($stylesheet);
$xsl = new XSLTProcessor();
$xsl->importStyleSheet($docXSLT);
foreach($paramsArr as $key => $value)
{
$xsl->setParameter('', $key, $value);
}
return $xsl->transformToDoc($doc);
}
Wenn ich einen Fehler in der XSLT-Datei habe, bekomme ich ich immer folgende, wenig aussagekräftige Fehlermeldungen:
1.) Warning: XSLTProcessor::transformToDoc() [xsltprocessor.transformtodoc]: No stylesheet associated to this object
=> 2.) Fatal error: Call to a member function saveXML()
Den Fehler zu finden, ist immer recht aufwendig und langwierig: Ich versuche die Änderungen schrittweise rückgängig zu machen bzw. bestimmte Bereiche der XSLT-Datei auszukommentieren um den Fehler einzugrenzen.
Gibt es auch die Möglichkeit, dass mir PHP sagt, was die Fehlerursache ist und in welcher Zeile der Fehler auftritt?
Viele Grüße
Benedikt
Hallo,
$stylesheet = file_get_contents($stylesheetLocation);
> ~~~php
> return $xsl->transformToDoc($doc);
>
1.) Warning: XSLTProcessor::transformToDoc() [xsltprocessor.transformtodoc]: No stylesheet associated to this object
Das hört sich irgendwie so an, als wenn bei der Funktion "file_get_contents" etwas schief gegangen ist. Vielleicht hilft es die Existenz der Datei $stylesheetLocation mit "file_exists" abzufragen?
=> 2.) Fatal error: Call to a member function saveXML()
... on a non-object in ...? Wäre interessant zu wissen, was dort steht.
Gibt es auch die Möglichkeit, dass mir PHP sagt, was die Fehlerursache ist und in welcher Zeile der Fehler auftritt?
Versuche so viele Abfragen auf Existenz, Validität, Wertbereiche usw. einzubauen wie möglich und lass dir diese Ereignisse in einer Logdatei (oder stdout) ausgeben.
Grüße
Hallo,
vielen Dank für deine Hilfe.
Also die Datei wird gefunden. Die Ursache für die Fehlermeldung ist ein Fehler in der Datei. (Wenn der Pfad falsch ist, und die Datei nicht gefunden wird, erhalte ich die Meldung " failed to open stream: No such file or directory...")
on a non-object in ...? Wäre interessant zu wissen, was dort steht.
Da steht im Prinzip die Datei sowie Zeilennummer des Aufrufs von saveXML (allerdings nicht direkt, da der code über eval vom CMS ausgeführt wird, in die das Skript eingebettet ist).
Versuche so viele Abfragen auf Existenz, Validität, Wertbereiche usw. einzubauen wie möglich und lass dir diese Ereignisse in einer Logdatei (oder stdout) ausgeben.
Kannst du mir erklären, wie das genau aussehen würde? Meinst du das XML, das über das XSLT-Skript transformiert wird? Mein Problem sind Fehler direkt in der XSLT-Datei, bspw. wenn über xsl:call-template ein Template aufgerufen wird, das nicht existiert.
Ansonsten hat mir ein XSLT Editor bedingt weitergeholfen. Dieser erkennt viele syntaktische Fehler, wie z.b. ein fehlender Ende-Tag.
Grüße
Bene