Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Exportar XML


Luizzzzzzzzzzzzzzzz

Pergunta

6 respostass a esta questão

Posts Recomendados

  • 0
Como qualquer outra coisa que precisa ser escrita em um arquivo: fopen/fwrite/fclose.

Agradecendo como sempre as EXCELENTES respostas do nosso GRANDE amigo Eserra ... alguém mais pode me ajudar... eu consegui gerar a estrutura que desejo... porem falta eu gerar o arquivo xml com um nome que precisa ser dinamico a cada geração...

passo abaixo o codigo:

<?php

$data = date("d/m/Y");

include"config.php";

$sql = "select * from nuke_pages order by date DESC LIMIT 12";

$data = date("d/m/Y");

$query = mysql_query($sql);

// print o cabeçalho do xml

header("Content-type: application/xml");

// cabeçalho do RSS

echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";

?>

<?php

$data = date("d/m/Y");

include"config.php";

$sql = "select * from nuke_pages order by date DESC LIMIT 12";

$data = date("d/m/Y");

$query = mysql_query($sql);

// print o cabeçalho do xml

header("Content-type: application/xml");

// cabeçalho do RSS

echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";

?>

<rss version="2.0">

<channel>

<title>Portal - Notícias</title>

<link>http://www.nomedosite</link>

<description>Últimas noticias - Portal</description>

<language>pt-br</language>

<copyright>Site - Todos os direitos reservados.</copyright>

<image>

<title>Portal</title>

<width>78</width>

<height>100</height>

<link>http://www.nomedosite</link>

<url>http://www.nomedosite/banner/banner.gif</url>

</image>

<webMaster>email@gmail.com</webMaster>

<?php

while($result = mysql_fetch_array($query)) {

?>

<item>

<title><? echo"$result[title]";?></title>

<link>

http://www.nomedosite/colunas-<? echo"$result[pid]";?>.html

</link>

<description> <? echo"$result[signature]";?> </description>

</item>

<?php } ?>

</channel>

</rss>

?>

Eu abro a pagina em php e aparece toda a estrutura do XML...mas preciso que o php exporte um arquivo xml dentro de um diretorio no servidor... como faço isso??

Obrigado pessoal...e o Eserra! :blush:

Link para o comentário
Compartilhar em outros sites

  • 0

Lamentável o que a gente tem que aguentar... enfin como eu passei lá em cima: fopen, fwrite, fclose. O manual tem exemplos bem claros. Para gerar nomes aleatórios, sorteia os caracteres com rand, adivinha onde tem exemplos? No manual, é claro.

Link para o comentário
Compartilhar em outros sites

  • 0
Como qualquer outra coisa que precisa ser escrita em um arquivo: fopen/fwrite/fclose.

Agradecendo como sempre as EXCELENTES respostas do nosso GRANDE amigo Eserra ... alguém mais pode me ajudar... eu consegui gerar a estrutura que desejo... porem falta eu gerar o arquivo xml com um nome que precisa ser dinamico a cada geração...

passo abaixo o codigo:

...

$data = date("d/m/Y");

include"config.php";

$sql = "select * from nuke_pages order by date DESC LIMIT 12";

$data = date("d/m/Y");

$query = mysql_query($sql);

// print o cabeçalho do xml

header("Content-type: application/xml");

.....

Eu abro a pagina em php e aparece toda a estrutura do XML...mas preciso que o php exporte um arquivo xml dentro de um diretorio no servidor... como faço isso??

Obrigado pessoal...e o Eserra! :blush:

Olá Luiz, sou iniciante em programação orientada mas tem uma classe super simples de implantar que gera dinãmicamente arquivos .xml segue :

1: xml_writer

<?php
/*
 * (English)
 * This file is part of filExp.
 *
 * filExp is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * filExp is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with filExp.  If not, see <http://www.gnu.org/licenses/>.
 * ***
 * (Português)
 * Este arquivo faz parto do filExp.
 *
 * filExp é um software livre: você pode redistribui-lo ou modificá-lo
 * sob os termos da GNU General Public License como publicada pela
 * Free Software Foundation.
 *
 * filExp está sendo distribuido no intuito de ser útil,
 * mas SEM NENHUMA GARANTIA; sem jamais implicar em garantia por
 * COMÉRCIO ou USO PARA PROPÓSITOS PARTICULARES. Veja a
 * GNU General Public License para mais detalhes.
 *
 * Você deve ter recebido uma cópia da GNU General Public License
 * junto com o filExp. Caso contrário, visite <http://ww.gnu.org/license/>
 *
 */

/**
 * @author Wanderson Regis Silva <wanderson@wandersonregis.com>
 * @version 0.1.0.0 2009-04-10
 */

/**
 * Gerenciador de nós do documento
 */
class xml_node {
  /**
   * @var string O nome deste nó
   */
  private $node;

  /**
   * @var string O conteúdo interno do nó
   */
  private $contents;

  /**
   * @var array Os parâmetros do nó
   */
  private $params;

  /**
   * @var mixed Os subnós
   */
  private $nodes;

  /**
   * Inicializa o nó, com nome e possível conteúdo
   * @param string $nodename Nome do nó
   * @param string $contents Conteúdo do nó
   */
  function __construct($nodename, $contents = '') {
    $this->itialize($nodename, $contents);
  }
  
  /**
   * Inicializa o nó, com nome e possível conteúdo, útil para limpar o conteúdo ou em classes herdeiras
   * @param string $nodename Nome do nó
   * @param string $contents Conteúdo do nó
   */
  function itialize($nodename, $contents = '') {
    $this->node = str_replace(" ", "_", $nodename);
    $this->contents = $contents;
    $this->nodes = array();
    $this->params = array();
  }

  /**
   * Modifica o conteúdo textual do nó
   * @param string $contents O conteúdo textual
   * @param boolean $replace Se é para sobrescrever o conteúdo anterior (true) ou adicionar ao fim (false)
   */
  function alter_node_content($contents, $replace = true) {
    if($replace)
      $this->contents = $contents;
    else
      $this->contents .= $contents;
  }

  /**
   * Adiciona um novo parâmetro
   * @param string $nodename Nome do novo nó
   * @param string $contents Conteúdo textual do nó
   */
  function add_param($param, $content = '') {
    $count = count($this->params);
  
    $this->params[$count][0] = str_replace(" ", "_", $param);
    $this->params[$count][1] = $content;
  }

  /**
   * Adiciona um novo subnó
   * @param string $nodename Nome do novo nó
   * @param string $contents Conteúdo textual do nó
   */
  function add_node($nodename, $contents = '') {
    $this->nodes[] = new xml_node($nodename, $contents);
  }

  /**
   * Adiciona uma árvore já pronta de nós
   * @param mixed $tree Árvore de nós
   */
  function add_node_tree($tree) {
    $this->nodes[] = $tree;
  }

  /**
   * Retorna o total atual de subnós dentro deste nó
   * @return int
   */
  function get_nodes_count() {
    return count($this->nodes);
  }

  /**
   * Retorna todos os subnós do nó atual
   * @return array
   */
  function get_nodes() {
    return $this->nodes;
  }

  /**
   * Retorna um nó específico, em caso de nó um inexistente, retorna false
   * @param int Índice do nó
   * @return mixed
   */
  function get_node($nodenumber) {
    if($nodenumber >= $this->get_nodes_count())
      return false;

    return $this->nodes[$nodenumber];
  }

  /**
   * Retorna a versão textual da extrutura
   * @return string A extrutura XML gerada
   */
  function get_text_node() {
    $text = "<" . $this->node;
    
    for($i = 0; $i < count($this->params); $i++) {
      $text .= " " . $this->params[$i][0] . "=\"" . $this->params[$i][1] . "\"";
    }
    
    $text .= ">\n";
    
    $text .= $this->contents . ( ! empty($this->contents) ? "\n" : NULL);

    if($this->get_nodes_count()) {
      for($i = 0; $i < $this->get_nodes_count(); $i++) {
        $text .= $this->nodes[$i]->get_text_node();
      }
    }
    
    $text .= "</" . $this->node . ">\n";
    
    return $text;
  }

  /**
   * Retorna umma array contendo a extrutura
   * @return array A extrutura XML gerada
   */
  function get_array_node() {
    $array['name'] = $this->node;
    
    for($i = 0; $i < count($this->params); $i++) {
      $array['param'][] = array(
        'name' => $this->params[$i][0],
        'value' => $this->params[$i][1]
      );
    }
    
    $array['content'] = $this->contents;
    
    $array['nodes'] = array();
    if($this->get_nodes_count()) {
      for($i = 0; $i < $this->get_nodes_count(); $i++) {
        $array['nodes'][] = $this->nodes[$i]->get_array_node();
      }
    }
    
    return $array;
  }
}

/**
 * Constrói uma extrutura de arquivo XML
 */
class xml_writer extends xml_node {
  /**
   * @var string Arquivo de saída
   */
  private $filename;

  /**
   * @var string Arquivo css de estilização
   */
  private $css;

  /**
   * @var string Arquivo XSLT de estilização
   */
  private $xslt;

  /**
   * Inicializa a extrutura, com o possível node de arquivo de saída, com nome e possível conteúdo, útil para limpar o conteúdo ou em classes herdeiras
   * @param string $filename Nome do arquivo de saída
   * @param string $mainnode Nome do nó
   * @param string $maincontent Conteúdo do nó
   */
  function __construct($filename = 'xmlfile.xml', $mainnode = 'xmlnode', $maincontent = '') {
    $this->filename = $filename;
    parent::itialize($mainnode, $maincontent);
    $this->css = array();
    $this->xslt = array();
  }

  /**
   * Adiciona um arquivo css para estilização
   * @param string $filename Nome do arquivo
   */
  function add_css($filename) {
    $this->css[] = $filename;
  }

  /**
   * Adiciona um arquivo xslt para estilização
   * @param string $filename Nome do arquivo
   */
  function add_xslt($filename) {
    $this->xslt[] = $filename;
  }
  
  /**
   * Envia a extrutura gerada para a saída do navegador
   */
  function send() {
    header("Pragma: public\n");
    header("Expires: 0\n");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0\n");
    header("Content-Type: text/xml\n");
    header("Content-Disposition: attachment;filename=" . $this->filename . "\n");

    echo "<?xml version=\"1.0\" charset=\"utf-8\"?>\n";
    
    if(count($this->css)) {
      foreach($this->css as $css)
        echo "<?xml-stylesheet type=\"text/css\" href=\"" . $css . "\"?>\n";
    }
    
    if(count($this->xslt)) {
      foreach($this->xslt as $xslt)
        echo "<?xml-stylesheet type=\"text/xsl\" href=\"" . $xslt . "\"?>\n";
    }
    
    echo parent::get_text_node();
  }
  
  /**
   * Grava a extrutura gerada para um arquivo
   */
  function write() {
    $data =  "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
    
    if(count($this->css)) {
      foreach($this->css as $css)
        $data .= "<?xml-stylesheet type=\"text/css\" href=\"" . $css . "\"?>\n";
    }
    
    if(count($this->xslt)) {
      foreach($this->xslt as $xslt)
        $data .= "<?xml-stylesheet type=\"text/xsl\" href=\"" . $xslt . "\"?>\n";
    }
    
    $data .= $this->get_text_node();

    $file = @fopen($this->filename, "w");

    if($file) {
      fwrite($file, $data);
      fclose($file);
      return true;
    } else return false;
  }
}
?>
2.sample.php
<?php
// Este exemplo irá criar um arquivo xml com dados de países e algus de seus estados
include_once 'xml_writer.php';

 // Inicia o arquivo XML
$mundo = new xml_writer("MUITOLOCO.xml", "GOSTOSAS");

// Adiciona primeiramente um país

$mundo->add_node("NASuecia", "a Suecia tem mulheres fantásticas -- ");
$mundo->add_node("NASuecia", "a Suecia é show-- ");

// Adiciona o nó Brasil ao XML // setando um a um dos nós 
$mundo->add_node("Brasil", "O Brasil fica na américa latina");
// Pra pegar o último nó (neste caso o nó do Brasil), basta pegar a contagem de nós e subtrair 1
$brasil = $mundo->get_node($mundo->get_nodes_count() - 1);
// Adicionando parâmetros
$brasil->add_param("Capital", "Brasília");
$brasil->add_param("Idioma", "Português");
$brasil->add_param("Sigla", "BR");

  // Adiciona nós (subnós) ao último nó criado
  
  // Adiciona o nó Minas Gerais ao nó Brasil
  $brasil->add_node("Minas Gerais");
  $brasil_minas = $brasil->get_node($brasil->get_nodes_count() - 1);
  $brasil_minas->add_param("Capital", "Belo Horizonte");
  
  // Adiciona o nó São Paulo ao nó Brasil
  $brasil->add_node("São Paulo");
  $brasil_sampa = $brasil->get_node($brasil->get_nodes_count() - 1);
  $brasil_sampa->add_param("Capital", "São Paulo");

// Adiciona o nó EUA  ao XML
$mundo->add_node("Estados Unidos Da América");
$eua = $mundo->get_node($mundo->get_nodes_count() - 1);
// Adicionando parâmetros
$eua->add_param("Capital", "Washington");
$eua->add_param("Idioma", "Inglês");
$eua->add_param("Sigla", "EUA");

  // Aqui o nó do estado será criado e só depois  adicionado ao nó do país
  $eua_ny = new xml_node("Nova Iorque");
  $eua_ny->add_param("Capital", "Nova Iorque");
  $eua->add_node_tree($eua_ny);

// Definindo um arquivo CSS para modificar a exibição
$mundo->add_css("estilo.css");
// Podem ser adicionados tantos arquivos de estilo quanto forem necessários
// A outra opção seria usar um arquivo XSLT para isso
// Neste caso a sintaxe seria:
// $mundo->add_xslt("stilo.xsl");

// Grava em um arquivo
$mundo->write();
header('location: mundo.xml');
// Outras possibilidades:
//
// Enviar para a saída do navegador
// $mundo->send();
//
// Obter a forma textual do arquivo, sem o cabeçalho padrão
// $mundo->get_text_node();
//
// Obter a extrutura gerada em um array
// $mundo->get_array_node();
?>

Faça um teste com a sua aplicação.

Espero ter ajudado, qualquer problema retorne por favor.

Editado por davi.feo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...