关于在php中保存文件的问题
Posted
技术标签:
【中文标题】关于在php中保存文件的问题【英文标题】:A question about saving a file in php 【发布时间】:2011-05-30 01:14:10 【问题描述】:我使用以下代码在 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 显示在浏览器中,我尝试了一些方法,但仍然无法弄清楚如何将此结果打印到文件而不是显示在浏览器中,感谢任何帮助,谢谢前进。
【问题讨论】:
【参考方案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");
改为
【讨论】:
【参考方案2】:您正在更改$XML
的定义方式,只需在$XML
上调用load
方法而不是simplexml_load_file
:
$XML = new DOMDocument();
$XML->load("images/upload/source.xml");
完全没有理由使用simplexml
,因为XSLT 处理都是用DOMDocument 完成的。所以只要替换那一行,你就可以开始了......
【讨论】:
【参考方案3】:问题:
$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_load_file
,那么您并没有真正按照教程进行操作。
【讨论】:
【参考方案4】:$XML = new DOMDocument();
$XML = simplexml_load_file("images/upload/source.xml");
首先将DOMDocument
存储在$XML
中,然后将其替换为SimpleXMLElement
。 DOMDocument
确实有一个 save
方法,但 SimpleXMLElement
没有。
录取:没有看教程,所以我不知道为什么/如果那个有效。
【讨论】:
我将最后两行代码替换为 "print $xslt->transformToXML( $XML )" ,现在执行 XSLT 后的结果已正确打印到浏览器。如果我仍然希望它打印到文件中呢? @Robert:然后使用$XML->asXML()
:php.net/manual/en/simplexmlelement.asxml.php。
这应该是一个评论,因为它只指出出了什么问题,而不是如何解决它(不值得 -1 恕我直言,但只是说明)...
@ircmaxell:你可能是对的。问题只问“这里有什么问题?”不过。以上是关于关于在php中保存文件的问题的主要内容,如果未能解决你的问题,请参考以下文章