guardar archivo xml en zend

este es mi codigo ¡pero no sé por qué este código no puede crear un archivo xml y no muestra ningún error!

¡Muestra el resultado xml perfectamente pero no puede guardar este archivo en una ruta determinada!

public function indexAction()
{

 // XML-related routine - <urlset>
    $xml = new DOMDocument('1.0', 'utf-8');
    $masterRoot = $xml->createElement('urlset');
    $xml->appendChild($masterRoot);
    $publicpath = "/public";

    $data = array(
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ,'changefreq' =>'daily','priority' =>'1.00'),
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ."/about us" ,'changefreq' =>'daily','priority' =>'0.98'),
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ."/contact us",'changefreq' =>'daily','priority' =>'0.98'),
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ."/useful links",'changefreq' =>'daily','priority' =>'0.98')        
    );
    $this->_url($xml,$masterRoot,$data);  
    $output = $xml->saveXML();

    $xml->save($this->view->serverUrl() . "/sitemap.xml" );

    // Both layout and view renderer should be disabled
    Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true);
    Zend_Layout::getMvcInstance()->disableLayout();

    // Setting up headers and body
    $this->_response->setHeader('Content-Type', 'text/xml; charset=utf-8')->setBody($output);
}

protected function _url($xml,$masterRoot,$allData)
{
    foreach($allData as $data)
    {
            // <url>
                 $root = $xml->createElement('url');
                $masterRoot->appendChild($root);
             //<loc>http://www.example.com/</loc>
                $elem = $xml->createElement('loc');
                $root->appendChild($elem);
                $elemtext = $xml->createTextNode($data['loc']);
                $elem->appendChild($elemtext);
             //<lastmod>2005-01-01</lastmod>
                $elem = $xml->createElement('lastmod');
                $root->appendChild($elem);
                $elemtext = $xml->createTextNode($data['lastmod']);
                $elem->appendChild($elemtext);
             //<changefreq>monthly</changefreq>
                $elem = $xml->createElement('changefreq');
                $root->appendChild($elem);
                $elemtext = $xml->createTextNode($data['changefreq']);
                $elem->appendChild($elemtext);
             //<priority>0.8</priority>
                $elem = $xml->createElement('priority');
                $root->appendChild($elem);
                $elemtext = $xml->createTextNode($data['priority']);
                $elem->appendChild($elemtext);

    }

}

estas 2 funciones están en una clase de controlador

preguntado el 21 de mayo de 12 a las 12:05

Solo adivina. problemas con los permisos de archivos... también lo que es $this->view->serverUrl() -

¿Quizás la ruta de su archivo no se puede escribir? -

2 Respuestas

que regresa

$this->view->serverUrl()

creo que es algo asi http://www.xxxx.xx, porque devuelve una URL.

¿Es este quizás el problema? necesitas algo como

$xml->save("foo.xml");

contestado el 21 de mayo de 12 a las 12:05

$xml->save($this->view->serverUrl() . "/sitemap.xml");

Está intentando guardar en una URL HTTP completa. A menos que su servidor admita PUT cargas del método (que lo dudo, y eso es algo bueno) esto no funcionará.

DOMDocument::saveXML() espera una ruta del sistema de archivos local. Dado que parece querer guardar esto en la raíz de su documento, sospecho que simplemente:

$xml->save("sitemap.xml");

...hará el trabajo.

contestado el 21 de mayo de 12 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.