2010-12-23 54 views
4

我用下面的代码做一个XSLT在PHP中:约在PHP保存文件的问题

# 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 ::保存()”之后。但是,实际上,我在这里遵循一个教程: 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获取浏览器中显示,我已经尝试了一些办法,但仍无法弄清楚如何打印这个结果到一个文件而不是在浏览器中显示,任何帮助表示赞赏,在此先感谢。

回答

3

你改变如何$XML定义,只需调用load方法上$XML而不是simplexml_load_file

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

没有理由在所有使用simplexml由于XSLT处理所有的DOMDocument完成。所以,只需更换一条线,你应该很好走...

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

首先你存储在一个$XMLDOMDocument,然后你用SimpleXMLElement替换它。 DOMDocument确实有save方法,但SimpleXMLElement没有。

门票:没有看教程,所以我不知道为什么/如果那个工程。

+0

我取代了最近的两使用“print $ xslt-> transformToXML($ XML)”的代码行,现在执行XSLT后的结果将被正确地打印出来到浏览器。那么我仍然希望将它打印到文件中呢? – Kevin 2010-12-23 16:04:45

0

问题:

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

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

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

如果你看教程,它显然是:

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

所以,如果你使用simplexml_load_file,那么你就没有真正遵循。教程

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

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

使用

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

代替