关于用php保存文件的一个问题

关于用php保存文件的一个问题,php,xml,simplexml,xslt,domdocument,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)

我使用以下代码在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()”。但是,实际上,我在这里遵循一个教程:

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

$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml");
按照你们的建议,我修改了代码如下:

 # 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显示在浏览器中,我尝试了一些方法,但仍然不知道如何将此结果打印到文件中,而不是显示在浏览器中,任何帮助都将不胜感激,提前感谢

$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml");
首先将
DOMDocument
存储在
$XML
中,然后将其替换为
simplexmlement
DOMDocument
确实有一个
save
方法,但
simplexmlement
没有

承认:没有看教程,所以我不知道为什么/如果那一个有效。

问题:

$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml");
创建一个DOMDocument,然后用SimpleXMLElement对象覆盖它。第一行是死代码。您根本没有使用它,因为您在下一条语句中覆盖了它

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

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

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

因此,如果您使用
simplexml\u load\u文件
,那么您并没有真正按照教程进行操作。

如果您要更改
$XML
的定义方式,只需调用
$XML
上的方法,而不是
simplexml\u load\u文件

$XML = new DOMDocument(); 
$XML->load("images/upload/source.xml");
没有理由使用
simplexml
,因为XSLT处理都是用DOMDocument完成的

$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml");
您是说
$XML
是一个,然后在第2行用一个替换它

使用


相反

我将最后两行代码替换为“print$xslt->transformToXML($XML)”,现在执行xslt后的结果正确地打印到浏览器中。那我还想将其打印到文件中呢?@Robert:然后使用
$XML->asXML()
:。这应该是一个评论,因为它只指出了问题所在,而不是如何解决问题(不值得-1分,但只是说明)。@ircmaxell:你可能是对的。但问题只是问“这里出了什么问题?”。