Woo-hoo!
Ainda não estou muito acostumado com Programação Orientada a Objeto. Não vou ficar falando das vantagens e desvantagens dela aqui, mas o fato é que ainda não tenho tanta prática com ela, o raciocínio muitas vezes ainda fica complicado, redundante...
Mas a vida é assim. É errando que se aprende (pelo menos comigo). Programação é ler muito e experimentar muito.
Eu estava querendo criar uma rotina com PHP que editasse o arquivo de RSS do meu site automaticamente assim que eu incluísse uma matéria, um artigo, uma notícia, etc... no banco de dados.
O arquivo de RSS é um arquivo de texto, que usa basicamente tags XML.
Até aí nada de errado; conheço as tags e tudo mais. Mas no PHP, muitas bibliotecas poderosas dão preferência à orientação a objetos, e aí surgiu o dúvida: fazer do modo procedural (abrir o arquivo, ler, encaixar o ponteiro e escrever as novidades, tudo no passo-a-passo procedural de sempre) ou usar as DOM functions do PHP (que servem justamente para esse tipo de coisa (trabalhar com arquivos XML)?
Pensei: "Essa biblioteca não está aí à toa... Certo, vou usar essa porra...".
Não foi tão difícil criar o esqueleto do código. Rapidinho estava funcionando. O problema era que o arquivo saía com uma formatação feia, errada... A estrutura estava certa, mas a formatação de saída... Isso mesmo setando a propriedade formatOutput para true. [$fileRSS->formatOutput = true].
E tenta daqui e tenta de lá. Codificação? ISO-8859-1 ou UTF-8 dava na mesma.
Precedência na hora de setar a propriedade? será?
$fileRSS->load(rss.xml);
$fileRSS->formatOutput = true; //(ou TRUE, ou True, ou 1)...
ou o contrário... nada ia, só o tempo...
Quando o arquivo estava vazio, ou de alguma forma se sobre escrevia tudo no arquivo a coisa funcionava. De qualquer jeito.
Google, PHP.net, uma caralhada de fóruns e blogs e nada. Já estava pensando em enviar um e-mail para o pessoal do PHP.
Veio a idéia: mandar ignorar os espaços de identação originais.
$fileRSS->preserveWhiteSpace = false;
Woo-hoo! Funfô! Funfô!
No final das contas os trechos fundamentais estão aí abaixo:
/* ... */
$fileRSS = new DOMDocument(); // aqui cria o objeto
$fileRSS->formatOutput = true; // para ter uma saída bonita
$fileRSS->preserveWhiteSpace = false; // e para conseguir a saída bonita
$fileRSS->load('path_to_file/rss.xml'); // lê o conteúdo do arquivo para o objeto
/* faz as alterações e inclusões */
$fileRSS->save('path_to_file/rss.xml'); // salva no arquivo de origem
Té+.
Nenhum comentário:
Postar um comentário