![]() |
PHP + SQL + XML - Versão de Impressão +- Forum Pplware (http://forum.pplware.com) +-- Fórum: Mais Tech (/forumdisplay.php?fid=11) +--- Fórum: Programação e Web (/forumdisplay.php?fid=16) +--- Tópico: PHP + SQL + XML (/showthread.php?tid=5691) |
PHP + SQL + XML - mpmont - 13-04-2010 15:58 boa tarde, estou a tentar fazer uma pequena aplicação em flash que vai buscar todo o conteúdo a xml. Então, agora pensei em fazer um pequeno backoffice para a coisa e estou a fazer uns testes para ver se consigo por a coisa a funcionar, mas até agora sem sucesso. Pelo que li a melhor maneira para fazer isto é ter uma base de dados que basicamente tem a estrutura do xml. por exemplo tenho o xml articles que pode ser algo como: <articles> <article> <id>1</id> <title>asd</title> <intro>asdasd</intro> <content>asdasd</content> <date>asdasd</date> </article> </articles> e então terei uma tabela chamada articles que tem esta estrutura. Depois sempre que vou submeter um artigo novo por um formulário em php tenho que ir buscar os dados à base de dados e re-escrever o ficheiro articles.xml. Na parte do inserir na base de dados os novos dados, não tenho qualquer problema, no entanto é na parte do escrever de novo o xml é que as coisas se complicam. aqui vai o que consegui fazer até agora: Código PHP: //vai buscar conteudo à bd por agora recebo dois erros: Warning: SimpleXMLElement::addChild() [simplexmlelement.addchild]: Cannot add child. Parent is not a permanent member of the XML tree in D:\wamp\www\xmlteste\addnew.php on line 31 Fatal error: Call to a member function addChild() on a non-object in D:\wamp\www\xmlteste\addnew.php on line 32 alguém me pode ajudar?? não tenho experiência nenhuma em trabalhar com php e XML.. a única experiência que tenho é de php + SQL e mesmo assim não é assim tanta. ok, ja consigo adicionar a nova info no ficheiro xml: fiz a seguinte modificação: Código PHP: $xml = simplexml_load_file("articles.xml"); como podem ver adicionei na linha 2 $xml->articles[0] = NULL; supostamente isto deveria apagar todo o conteudo do node articles, no entanto isso não acontece... já só falta isto pois agora quando escrevo o xml ele nao apaga o conteudo que já lá estava e fica a dobrar... RE: PHP + SQL + XML - Bruno Bernardino - 13-04-2010 17:08 Boas, Por acaso não costumo utilizar esse método para gravar XML's, escrevo mesmo as tags e escrevo no ficheiro. Assim de repente (e sem ver exactamente o que faz o método asXML() nem perceber a existência do $sxe), mostra a tua função gravarXML, sff. RE: PHP + SQL + XML - mpmont - 13-04-2010 17:30 Código PHP: function gravarXML( $simpleXMLobject ) { eu acho que também preferia escrever as tags... por acaso não tens nenhum exemplo para eu me guiar??? ![]() é que todos os exemplos que encontrei usavam simpleXML o asXML serve para indentar o XML quando é criado! p'lo menos foi o que li... basicamente o que me falta fazer agora é apagar todo o conteúdo dentro do articles antes de voltar a escrever... RE: PHP + SQL + XML - WebDevXtream - 14-04-2010 12:20 Olá bom dia, Penso que o Bruno se está a referir a isto: Código PHP: //Inicia os dados a gravar no ficheiro XML Espero ter-te ajudado de alguma forma. Abraço RE: PHP + SQL + XML - Bruno Bernardino - 14-04-2010 13:54 O ficheiro articles.xml tem as permissões necessárias? Quanto ao exemplo que me pediste, é muito simples, é como se estivesses a escrever um ficheiro de texto, vê esta função: Código PHP: <?php RE: PHP + SQL + XML - mpmont - 14-04-2010 17:22 olá e desde já obrigado por estarem a ajudar, @WebDevXtream esse teu exemplo ele escreve o ficheiro todo, mas imagina que eu no mesmo ficheiro tinha mais info do a info relativa aos articles? como é que eu fazia para ele escrever apenas dentro de <articles> criando cada um dos artigos dentro desta tag... o meu exemplo com simplexml está a funcionar, só não apaga antes de escrever no sitio, mas já escreve no sitio certo... ou seja se houvesse uma maneira de apagar o conteudo do ficheiro entre <articles> e </articles> era ouro sobre azul ![]() RE: PHP + SQL + XML - WebDevXtream - 14-04-2010 17:40 Olá, Não sei se percebo muito bem a tua ideia... No exemplo que te dei, no fundo o ficheiro xml é re-escrito todas as vezes que é executado, ou seja não há necessidade de te preocupares com o conteúdo que está dentro de <articles>...</articles> pois consoante a tua "query" são "escritos" os artigos que tu pretendes. E o exemplo também foi no seguimento da sugestão do Bruno, de escrever as tag's directamente. Eu no teu caso, e atenção que estou a "Lançar para o Ar", pois não conheço o que estás no fundo a programar, criaria uma função que me iria gerar este bloco do <articles> (retirando como é obvio a parte de escrever o ficheiro e os header's de geração de xml), e depois na zona onde pretendesse que fosse incorporado a parte de <articles> chamava a função. Assim sendo tens o script com todas as informações que pretendes, além da parte do <articles>, e depois apenas são escritos os resultados da query no formato xml naquele determinado ponto em que chamas a função, e podes continuar a anexar mais informação no script. No fim escreves o ficheiro xml no servidor, coma minha solução "fwrite()" ou com a do Bruno "file_put_contents()", são a mesma coisa. Sei que pode estar a parecer um pouco confuso mas também estamos no campo das suposições ![]() Um abraço. |