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:
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:
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...
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
$query = "SELECT * FROM articles";
$get_articles = mysql_query($query, $connection);
confirm_query($get_articles);
//vai buscar o ficheiro xml
$xml = simplexml_load_file("articles.xml");
while ($row = mysql_fetch_array($get_articles)){
$article = $xml ->articles->addChild('article');//linha 31
$article->addChild('id', utf8_encode($row ['idarticle']));//linha 32
$article->addChild('title', utf8_encode($row ['title']));
$article->addChild('intro', utf8_encode($row ['intro']));
$article->addChild('content', utf8_encode($row ['content']));
$article->addChild('date', utf8_encode($row ['date']));
}
$xml->asXML("articles.xml");
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");
$xml->articles[0] = NULL;
$sxe = new SimpleXMLElement($xml->asXML());
while ($row = mysql_fetch_array($get_articles)){
$article = $xml ->addChild('article');
$article->addChild('id', utf8_encode($row ['idarticle']));
$article->addChild('title', utf8_encode($row ['title']));
$article->addChild('intro', utf8_encode($row ['intro']));
$article->addChild('content', utf8_encode($row ['content']));
$article->addChild('date', utf8_encode($row ['date']));
}
$xml->asXML("articles.xml");
gravarXML($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...