Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago de Oliveira Cruz

[Resolvido] Criando XML com PHP

Recommended Posts

Bom galera eu sou meio novo com php...

 

Sei poucas funções.

 

Estou aprendendo tudo na base de leitura de foruns etc... pela web mesmo então peço um pouco de consideração quanto a demora de meu entendimento caso ocorra :P

 

Eu fiz o seguinte código

<?php
/*Abre um arquivo chamdo loja.xml, como estou tentando abrir com o w+, se o arquivo não existir haverá a tentativa de criar ele*/
$abre_xml = fopen("loja.xml","w+");

$produto = $_POST['produto'];
$artista = $_POST['artista'];
$quantidade = $_POST['quantidade'];
$valor = $_POST['valor'];
$id = $_POST['id'];

$conteudo = "<item produto=\"$produto\" artista=\"$artista\" quantidade=\"$quantidade\" valor=\"$valor\" id=\"$id\" />";

fwrite($abre_xml,"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n\n\n<lista>\n\n\n");
fwrite($abre_xml, $conteudo);
fwrite($abre_xml,"\n\n\n</lista>");

/*Fecha o arquivo aberto (não é necessário, mas é bom*/
fclose($abre_xml);
?>

Com base em um código encontrado na internet... mas agora não lembro mais onde está o source...

 

O importante é que o código está funcionando perfeitamente bem :)

Mas ele gera apenas uma linha diversas vezes com base em um formulário enviado por flash.

 

Eu queria só uma função ou de alguma maneira ao abrir esse xml pelo fopen pegar a linha que esta escrita com as informações já adicionadas ai produto, artista, quantidade, valor e id.

 

E adicionar outra linha com os mesmos atributos.

 

Ou seja pegar essas informações ai e adicionar elas eternamente conforme meu outro formulário for chamando esse arquivo.

 

Para gerar um xml grande mesmo ;P com diversas linhas com informações

 

Será que é possivel com esse código ai?

 

Falaram que eu tinha de ler algo relacionado a array2xml e xml2array... mas fiquei meio perdido... achei mais fácil o meu código (que é base de um contador de net ><).

 

Alguem sabe de algo que pode talvez solucionar minha duvida... ou ajudar de alguma maneira?

 

Obrigado pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte...é só um fwrite.

E o PHP tem funções próprias pra isso.

Veja:http://forum.imasters.com.br/index.php?showtopic=322799

Se quisesse por exemplo salvar em um arquivo,usaria:

$dom->save('nome.xml');

Se quisesse abrir o arquivo usaria por exemplo:

$dom->load('nome.xml');

O resto é que nem DOM mesmo...

 

Edit:

Referência de funções:http://br2.php.net/manual/pt_BR/class.domdocument.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas ai o caso que você me deu com DOM

 

Não trabalha com atributos ali ...

 

Eu to trabalhando com atributos... pois eu leio eles em um dataGrid de Flash...

 

Ou seja eu precisaria criar uma linha só com um elemento cheio de atributos... e ir colocando mais linhas conforme eu for adicionando as informações...

 

Tipo... eu precisaria ali no meu código ao meu ver uma variavel holder que segura-se a informação que eu busco... no caso se ele encontrar a linha <item> do xml e ficar com essa linha adicionar e depois adicionar ela no campo conteudo com \n para que ele escreva com uma diferença de linhas...

 

Digamos

 

Que ficaria assim

<?xml ?>

<lista>

<item produto="" artirsta="" quantidade="" valor="" id="" />

</lista>

 

Esse acima é meu xml e o que meu código escreve se você rodar ele sozinho...

 

Se você rodar o código novamente ele apenas vai sobrescrever as informações.

 

O que eu queria é pegar o <item> e "copiar ele" em uma variavel, para que ao eu chamar a $conteudo = "\nvariavel\n<item produto=\"$produto\" artista=\"$artista\" quantidade=\"$quantidade\" valor=\"$valor\" id=\"$id\" />"; eu possa colocar a variavel ali...

 

Entendeu?

 

É possivel nesse código? ou eu teria de criar um novo?

 

Obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao tem problema o dom é pra isso mesmo, do jeito que você fez digamos que seria uma gambiarra fazer daquele jeito

 

usando DOM você pode criar seu XML do jeito que quiser

 

existe o metodo setAttribute

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o fabyo disse...

Eis um exemplo:

<?php
$produto = 'cachaca';
$artista = 'cachacero';
$valor = '200';

$dom = new DOMDocument('1.0');

$root = $dom->createElement('lista');
$item = $dom->createElement('item');
$produtoAtt = $dom->createAttribute('produto');
$produtoAtt->appendChild($dom->createTextNode($produto));
$artistaAtt = $dom->createAttribute('artista');
$artistaAtt->appendChild($dom->createTextNode($artista));
$valorAtt = $dom->createAttribute('valor');
$valorAtt->appendChild($dom->createTextNode($valor));
$idAtt = $dom->createAttribute('id');
$idAtt->appendChild($dom->createTextNode('item'));
$item->appendChild($produtoAtt);
$item->appendChild($artistaAtt);
$item->appendChild($valorAtt);
$item->appendChild($idAtt);
$root->appendChild($item);
$dom->appendChild($root);

header('Content-type: text/xml');

$dom->save($produto.'.xml');
echo $dom->saveXML();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz esse código

<?php
$produto = $_POST['produto'];
$artista = $_POST['artista'];
$quantidade = $_POST['quantidade'];
$valor = $_POST['valor'];
$id = $_POST['id'];

$dom = new DomDocument();

$dom->load('loja.xml');
$att = $dom->appendChild($dom->createElement('item'));
$att->setAttribute('produto',$produto);
$att->setAttribute('artista',$artista);
$att->setAttribute('quantidade',$quantidade);
$att->setAttribute('valor',$valor);
$att->setAttribute('id',$id);

$dom->save('loja.xml');
?>

Só que ele escreve a primeira linha beleza... a segunda tbm...

 

Mas quando vai escrever a terceira ele apaga tudo e recomeça...

 

Como faço pra ele continuar eternamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao entendi bem seu problema mas acho que isso resolve:

<?php
$produto = 'cachaca';
$artista = 'cachacero';
$valor = '200';

$dom = new DOMDocument('1.0');
$lista = '';
if(file_exists('loja.xml')){
	$dom->load('loja.xml');
	$lista = $dom->getElementsByTagName('lista')->item(0);
} else {
	$lista = $dom->createElement('lista');
}

$item = $dom->createElement('item');
$produtoAtt = $dom->createAttribute('produto');
$produtoAtt->appendChild($dom->createTextNode($produto));
$artistaAtt = $dom->createAttribute('artista');
$artistaAtt->appendChild($dom->createTextNode($artista));
$valorAtt = $dom->createAttribute('valor');
$valorAtt->appendChild($dom->createTextNode($valor));
$idAtt = $dom->createAttribute('id');
$idAtt->appendChild($dom->createTextNode('item'));
$item->appendChild($produtoAtt);
$item->appendChild($artistaAtt);
$item->appendChild($valorAtt);
$item->appendChild($idAtt);
$lista->appendChild($item);
$lista->appendChild($dom->createTextNode("\n"));
$dom->appendChild($lista);

header('Content-type: text/xml');

$dom->save('loja.xml');
echo $dom->saveXML();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

aeeeeeeeeee

 

 

Era isso mesmo \o/

 

As modificações que eu fiz para que desse certo!

<?php
$produto = $_POST['produto'];
$artista = $_POST['artista'];
$quantidade = $_POST['quantidade'];
$valor = $_POST['valor'];
$id = $_POST['id'];


$dom = new DOMDocument('1.0');
$lista = '';
if(file_exists('loja.xml')){
	$dom->load('loja.xml');
	$lista = $dom->getElementsByTagName('lista')->item(0);
} else {
	$lista = $dom->createElement('lista');
}

$item = $dom->createElement('item');
$produtoAtt = $dom->createAttribute('produto');
$produtoAtt->appendChild($dom->createTextNode($produto));
$artistaAtt = $dom->createAttribute('artista');
$artistaAtt->appendChild($dom->createTextNode($artista));
$quantAtt = $dom->createAttribute('quantidade');
$quantAtt->appendChild($dom->createTextNode($quantidade));
$valorAtt = $dom->createAttribute('valor');
$valorAtt->appendChild($dom->createTextNode($valor));
$idAtt = $dom->createAttribute('id');
$idAtt->appendChild($dom->createTextNode($id));
$item->appendChild($produtoAtt);
$item->appendChild($artistaAtt);
$item->appendChild($quantAtt);
$item->appendChild($valorAtt);
$item->appendChild($idAtt);
$lista->appendChild($item);
$dom->appendChild($lista);

header('Content-type: text/xml');

$dom->save('loja.xml');
echo $dom->saveXML();
?>

:)

 

Agora tem como arranja um enter ai usando um \n

 

ou algo do tipo?

 

Vlwwwwwwwww mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

$produto = $_POST['produto'];

$artista = $_POST['artista'];

$quantidade = $_POST['quantidade'];

$valor = $_POST['valor'];

$id = $_POST['id'];

 

 

$dom = new DOMDocument('1.0');

$lista = '';

if(file_exists('loja.xml')){

$dom->load('loja.xml');

$lista = $dom->getElementsByTagName('lista')->item(0);

} else {

$lista = $dom->createElement('lista');

}

 

$item = $dom->createElement('item');

$produtoAtt = $dom->createAttribute('produto');

$produtoAtt->appendChild($dom->createTextNode($produto));

$artistaAtt = $dom->createAttribute('artista');

$artistaAtt->appendChild($dom->createTextNode($artista));

$quantAtt = $dom->createAttribute('quantidade');

$quantAtt->appendChild($dom->createTextNode($quantidade));

$valorAtt = $dom->createAttribute('valor');

$valorAtt->appendChild($dom->createTextNode($valor));

$idAtt = $dom->createAttribute('id');

$idAtt->appendChild($dom->createTextNode($id));

$item->appendChild($produtoAtt);

$item->appendChild($artistaAtt);

$item->appendChild($quantAtt);

$item->appendChild($valorAtt);

$item->appendChild($idAtt);

$lista->appendChild($item);

$lista->appendChild($dom->createTextNode("\n"));

$dom->appendChild($lista);

 

header('Content-type: text/xml');

 

$dom->save('loja.xml');

echo $dom->saveXML();

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O forum lentao...

 

Fiz o mesmo post 2 vezes sem querer sorry

 

Obrigado pela ajuda :D

 

Ta resolvido!

o/

 

Agora eu vo partir pro meu sistema de busca no xml :P

 

Qualquer coisa venho apurrinha vocês dinovo :)

 

Mas agora é na minha praia :P ActionScript :D

 

vlw ai a ajuda

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.