Inserindo dados em arquivo XML com PHP DOM

Eu estava tentando inserir novos dados em um arquivo XML existente, mas não está funcionando. Aqui está o meu arquivo xml:

 swimming running  

Agora, minha idéia era fazer dois arquivos: uma página de índice, onde exibe o que está no arquivo e fornece um campo para inserir novos elementos e uma página do php que irá inserir os dados no arquivo XML. Aqui está o código para index.php:

  test  load('sample.xml', LIBXML_NOBLANKS); $activities = = $xmldoc->firstChild->firstChild; if($activities!=null){ while(activities!=null){ echo $activities->textContent.'
'; activities = activities->nextSibling. } } ?>
insert activity:
</html

e aqui está o código para insert.php:

 load('sample.xml'); $newAct = $_POST['activity']; $root = $xmldoc->firstChild; $newElement = $xmldoc->createElement('activity'); $root->appendChild($newElement); $newText = $xmldoc->createTextNode($newAct); $newElement->appendChild($newText); $xmldoc->save('sample.xml'); ?> 

O usuário deve acessar index.php, onde ele verá uma lista das atividades atuais presentes no arquivo XML e um campo de texto abaixo onde ele pode inserir novas atividades. Ao clicar no botão enviar, a página chamaria insert.php, que contém um código que abre o arquivo XML em uma tree DOM, insere um novo nó no nó raiz e chama de volta a página index.php, onde o usuário deve ser capaz de ver a lista de atividades, sua nova atividade lá sob os outros. Não está funcionando. Quando eu clico no botão para enviar uma nova input, as páginas atualizam e, aparentemente, nada acontece, o XML é o mesmo que antes. O que eu fiz errado? Além disso, gostaria de saber se há uma maneira melhor de fazê-lo.

é a sua cópia de bloco de código e colada de seus arquivos existentes? se assim for, vejo dois problemas potenciais:

 
// should be:

nota: você está faltando action = "insert.php" , o que faria com que o formulário apenas recarrega-se sem submeter, qual é o comportamento que você descreve.

Em segundo lugar, certifique-se de ter permissão de gravação para “sample.xml”. Você pode confirmar se você está realmente escrevendo algo:

 print 'I wrote '.$xmldoc->save('sample.xml').' bytes of data'; 

Solução final

sample.XML

  swimming running Jogging Theatre Programming  

index.php

  test  < ?php $xmldoc = new DOMDocument(); $xmldoc->load("sample.xml", LIBXML_NOBLANKS); $activities = $xmldoc->firstChild->firstChild; if($activities!=null){ while($activities!=null){ echo $activities->textContent."
"; $activities = $activities->nextSibling; } } ?>
insert activity:

insert.php

 < ?php header('Location:index.php'); $xmldoc = new DOMDocument(); $xmldoc->load('sample.xml'); $newAct = $_POST['activity']; $root = $xmldoc->firstChild; $newElement = $xmldoc->createElement('activity'); $root->appendChild($newElement); $newText = $xmldoc->createTextNode($newAct); $newElement->appendChild($newText); $xmldoc->save('sample.xml'); ?> 

$ newText = $ xmldoc-> createTextNode ($ newActv);

Mude esta linha para

$ newText = $ xmldoc-> createTextNode ($ newAct);

Na verdade você cometeu erros em dois lugares.

Esta linha deve ser, eu acho que por causa do erro de digitação, você perdeu um sinal de igual. Além disso

Essas linhas devem ser

Tente agora, deve funcionar, Hop, isso faria algum sentido

Este é o código que eu trabalho para mim.

index.php

  test  < ?php $xmldoc = new DOMDocument(); $xmldoc->load('sample.xml', LIBXML_NOBLANKS); $activities = $xmldoc->firstChild->firstChild; if($activities!=null){ while($activities!=null){ echo $activities->textContent.'
'; $activities = $activities->nextSibling; } } ?>
insert activity:
insert.php < ?php header('Location:index.php'); $xmldoc = new DOMDocument(); $xmldoc->load('sample.xml'); $newAct = $_POST['activity']; $root = $xmldoc->firstChild; $newElement = $xmldoc->createElement('activity'); $root->appendChild($newElement); $newText = $xmldoc->createTextNode($newAct); $newElement->appendChild($newText); $xmldoc->save('sample.xml'); ?>

sample.xml

  swimming running  

Eu acho que sei qual é o problema com seu código. Você não deve escrever assim: < ?xml-stylesheet type="text/xsl" href="sample.xsl" ?> O código certo é:

 < ?xml:stylesheet type="text/xsl" href="sample.xsl" ?>