我使用以下代码在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会在浏览器中显示,我已经尝试了一些方法,但仍然无法弄清楚如何将此结果打印到文件而不是在浏览器中显示,任何帮助表示赞赏,谢谢提前。
答案 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
中,然后将其替换为SimpleXMLElement
。 DOMDocument
确实有save
方法,但SimpleXMLElement
没有。
录取:没看过教程,所以我不知道为什么/如果有的话。
答案 2 :(得分:1)
$XML = new DOMDocument();
$XML = simplexml_load_file("images/upload/source.xml");
您说 $XML
是DOMDocument,然后在第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。第一行是死代码。您根本没有使用它,因为您在下一个语句中覆盖它。
save
是DOMDocument
中的一种方法。 asXML($file)
相当于SimpleXML(或saveXML($file)
,它是别名。
如果你看一下教程,那很明显:
$xsl = new DomDocument();
$xsl->load("articles.xsl");
$inputdom = new DomDocument();
$inputdom->load("articles.xml");
所以,如果您使用simplexml_load_file
,那么您并没有真正关注本教程。