关于在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 对象覆盖它。第一行是死代码。你根本没有使用它,因为你在下一条语句中覆盖了它。

saveDOMDocument 中的一个方法。 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 中,然后将其替换为SimpleXMLElementDOMDocument 确实有一个 save 方法,但 SimpleXMLElement 没有。

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

【讨论】:

我将最后两行代码替换为 "print $xslt->transformToXML( $XML )" ,现在执行 XSLT 后的结果已正确打印到浏览器。如果我仍然希望它打印到文件中呢? @Robert:然后使用$XML->asXML():php.net/manual/en/simplexmlelement.asxml.php。 这应该是一个评论,因为它只指出出了什么问题,而不是如何解决它(不值得 -1 恕我直言,但只是说明)... @ircmaxell:你可能是对的。问题只问“这里有什么问题?”不过。

以上是关于关于在php中保存文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

通过保存对话框形式将由 php 脚本生成的文件保存到目录中

在 php 中保存由 fopen() 函数创建的文件?

在 PHP 中保存文件时出现问题(“无法打开流:没有这样的文件或目录”)

如何像保存文件一样保存和加载选中的复选框 - php

从 php 获取响应并保存在 android 文件中

使用 php 将 PDF 文件保存到 XML 文件