【问题标题】:A question about saving a file in php关于在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 显示在浏览器中,我尝试了一些方法,但仍然无法弄清楚如何将此结果打印到文件而不是显示在浏览器中,感谢任何帮助,谢谢前进。

【问题讨论】:

    标签: php xml simplexml xslt domdocument


    【解决方案1】:
    $XML = new DOMDocument(); 
    $XML = simplexml_load_file("images/upload/source.xml");
    

    $XMLDOMDocument,然后在第 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:你可能是对的。问题只问“这里有什么问题?”不过。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-14
          • 2010-10-17
          • 2021-06-06
          • 1970-01-01
          • 1970-01-01
          • 2016-11-04
          • 2011-10-24
          相关资源
          最近更新 更多