关于在php中保存文件的问题

时间:2010-12-23 15:56:01

标签: php xml simplexml xslt domdocument

我使用以下代码在php中执行XSLT:

 # 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") ;

代码非常简单,我们需要加载源xml文件,然后加载样式表,实际上它确实有效。

导致麻烦的代码是最后一行:

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

运行后我收到错误“致命错误:调用未定义的方法SimpleXMLElement :: save()”。但是,实际上,我在这里遵循一个教程: http://devzone.zend.com/article/1713

也许我搞砸了什么,有人能给我一些暗示吗?提前谢谢。

根据你们的建议,我修改了这样的代码:

 # 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 );

现在正确转换的XML会在浏览器中显示,我已经尝试了一些方法,但仍然无法弄清楚如何将此结果打印到文件而不是在浏览器中显示,任何帮助表示赞赏,谢谢提前。

4 个答案:

答案 0 :(得分:3)

您正在更改定义$XML的方式,只需在$XML而不是simplexml_load_file上调用load方法:

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

完全没有理由使用simplexml,因为XSLT处理都是使用DOMDocument完成的。所以只需更换那一行,你应该好好去......

答案 1 :(得分:1)

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

首先,您将DOMDocument存储在$XML中,然后将其替换为SimpleXMLElementDOMDocument确实有save方法,但SimpleXMLElement没有。

录取:没看过教程,所以我不知道为什么/如果有的话。

答案 2 :(得分:1)

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

$XMLDOMDocument,然后在第2行用SimpleXMLElement替换它

使用

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

代替

答案 3 :(得分:0)

问题:

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

您创建一个DOMDocument,然后使用SimpleXMLElement对象覆盖该DOMDocument。第一行是死代码。您根本没有使用它,因为您在下一个语句中覆盖它。

saveDOMDocument中的一种方法。 asXML($file)相当于SimpleXML(或saveXML($file),它是别名。

如果你看一下教程,那很明显:

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

所以,如果您使用simplexml_load_file,那么您并没有真正关注本教程。