2010-12-23 13 views
4

ich den folgenden Code verwendet haben eine XSLT in PHP zu tun:Eine Frage, über eine Datei in php Speichern

# LOAD XML FILE 
$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml"); 

# START XSLT 
$xslt = new XSLTProcessor(); 
$XSL = new DOMDocument(); 
$XSL->load('xsl/transfer.xsl', LIBXML_NOCDATA); 
$xslt->importStylesheet($XSL); 

#PRINT 
print $XML->saveXML(); 
print $XML->save("newfile.xml") ; 

Der Code ganz einfach ist, müssen wir die Quelle XML-Datei und laden Sie dann bis laden das Stylesheet, und tatsächlich funktioniert es tatsächlich.

Der Code, der Probleme verursacht, ist die letzte Zeile:

print $XML->save("newfile.xml") ; 

nach Laufen, die ich Fehler "Fatal error: Call to undefined Methode SimpleXMLElement :: save()" bekam. Aber eigentlich folgte ich hier einem Tutorial: http://devzone.zend.com/article/1713.

Vielleicht habe ich etwas vermasselt, könnte mir jemand einen Hinweis geben? Danke im Voraus.

# LOAD XML FILE 
$XML = new DOMDocument(); 
$XML->load("images/upload/source.xml"); 

# START XSLT 
$xslt = new XSLTProcessor(); 
$XSL = new DOMDocument(); 
$XSL->load('xsl/transfer.xsl', LIBXML_NOCDATA); 
$xslt->importStylesheet($XSL); 

#PRINT  
    print $xslt->transformToXML($XML); 

jetzt der korrekt transformierte XML wird im Browser, ich habe ein paar Möglichkeiten ausprobiert gezeigt kann aber immer noch nicht herausfinden, wie:

Ihre Jungen Rat folgend, habe ich den Code wie folgt geändert Um dieses Ergebnis in eine Datei zu drucken, anstatt es im Browser anzuzeigen, ist jede Hilfe dankbar, danke im Voraus.

Antwort

3

Sie ändern, wie $XML definiert ist, rufen Sie einfach die Methode load auf $XML statt simplexml_load_file:

$XML = new DOMDocument(); 
$XML->load("images/upload/source.xml"); 

Es gibt keinen Grund, simplexml zu verwenden, da die XSLT-Verarbeitung mit DOMDocument erledigt wird. Also ersetzen Sie einfach diese eine Zeile, und Sie sollten gut gehen ...

1
$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml"); 

Zuerst speichern Sie ein DOMDocument in $XML, und Sie dann ersetzen Sie es mit einem SimpleXMLElement. DOMDocument hat eine save Methode, aber SimpleXMLElement nicht.

Eintritt: habe nicht auf das Tutorial, so dass ich nicht weiß warum/wenn das funktioniert.

+0

ich meine letzte ersetzt zwei ersetzen Codezeilen mit "print $ xslt-> transformToXML ($ XML)", nun wird das Ergebnis nach dem Ausführen von XSLT korrekt gedruckt zum Browser. Was ist, ich möchte immer noch, dass es in eine Datei gedruckt wird? – Kevin

+0

@Robert: dann verwenden Sie $ XML-> asXML() ': http://www.php.net/manual/en/simplexmlelement.asxml.php. – Jon

+0

Dies sollte ein Kommentar sein, da es nur darauf hinweist, was falsch ist, nicht, wie es zu beheben ist (nicht wert -1 imho, aber nur unter Angabe) ... – ircmaxell

0

Problem:

$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml"); 

Sie erstellen ein DOMDocument, die Sie dann mit einem SimpleXMLElement Objekt überschreiben. Die erste Zeile ist ein toter Code. Sie verwenden es überhaupt nicht, da Sie es in der nächsten Anweisung überschreiben.

save ist eine Methode in DOMDocument. asXML($file) ist das Äquivalent für SimpleXML (oder saveXML($file), die ein Alias ​​ist

Wenn Sie sich das Tutorial schauen, es ist klar:.

$xsl = new DomDocument(); 
$xsl->load("articles.xsl"); 
$inputdom = new DomDocument(); 
$inputdom->load("articles.xml"); 

Also, wenn Sie simplexml_load_file verwenden, dann bist du nicht wirklich die folgenden . Tutorial

1
$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml"); 

Sie sagen dass $XML ein DOMDocument ist und man es dann mit einem SimpleXMLElement on line 2

Verwenden

$XML = new DOMDocument(); 
$XML->load("images/upload/source.xml"); 

statt