• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pouic

Adicionar elementos a um xml

9 mensagens neste tópico

Boas pessoal alguem pode explicar como posso ler um xml e adicionar um elemento?

ex. Inicial

<?xml version="1.0" encoding="UTF-8"?>
<candidate>
<person>
	<first_name>Nairoby</first_name>
	<last_name>Del Rosario</last_name>
</person>
</candidate>

queria adicionar n elementos <person> a este ficheiro......

ex. Final

<?xml version="1.0" encoding="UTF-8"?>
<candidate>
<person>
	<first_name>Nairoby</first_name>
	<last_name>Del Rosario</last_name>
</person>
<person>
	<first_name>Rosario</first_name>
	<last_name>John</last_name>
</person>
<person>
	<first_name>Joe</first_name>
	<last_name>Marrie</last_name>
</person>
</candidate>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para ler podes usar uma destas duas funções dependendo do que estás a usar, um ficheiro um uma string:

http://se.php.net/manual/pt_BR/function.simplexml-load-file.php

http://se.php.net/manual/pt_BR/function.simplexml-load-string.php

Para adicionar um elemento podes usar por exemplo esta função:

http://se.php.net/manual/pt_BR/function.simplexml-element-addChild.php

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estava a tentar usar o codigo abaixo.

<?php

	$xmldoc = new DOMDocument();
    $xmldoc->load('comments.xml');

 $persons = $xmldoc->appendChild($xmldoc->createElement('person')); 



 $first_name = $persons->appendChild($xmldoc->createElement('first_name')); 
 $first_name->appendChild( 
				 $xmldoc->createTextNode('maria')); 


 $last_name = $persons->appendChild($xmldoc->createElement('last_name')); 
 $last_name->appendChild( 
				 $xmldoc->createTextNode('maria')); 


	$xmldoc->formatOutput = true; 

    $xmldoc->save('comments.xml');

?> 

Mas não está a funcionar como queria...

como está ao correr, o xml fica com esta estrutura

<?xml version="1.0" encoding="UTF-8"?>
<candidate>
   <person>
      <first_name>Nairoby</first_name>
      <last_name>Del Rosario</last_name>
   </person>
</candidate>
<person>
  <first_name>maria</first_name>
  <last_name>maria</last_name>
</person>

queria colocar o elemento adicionado, dentro do elemento principal "<candidate>"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$persons = $xmldoc->appendChild($xmldoc->createElement('person'));

Tens que fazer algo como (isto não sei se é código válido):

$persons = $xmldoc->getElementsByTagName("candidate")->item(0)->appendChild($xmldoc->createElement('person'));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É isso mesmo :)

Obrigado.

Já agora há maneira de colocar o xml com o código identado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deve dar, mas qual é a necessidade disso?

Nunca consegui com o DOM, mas realmente não há necessidade, a não ser que o objectivo seja ver indentado no bloco de notas ou outro editor, porque quando aberto no IE por exemplo, aparece tudo indentado .. Also, não estar indentado deve pesar menos no browser ou em qualquer sistema de leitura (penso eu)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok. era mais para quando tiver a necessidade de editar alguma coisa em NPad ter o código todo direito :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok. era mais para quando tiver a necessidade de editar alguma coisa em NPad ter o código todo direito :P

Podes usar php para fazer isso, com o "\r\n" e "\t", se não me engano, mas terá de ser com o ficheiro já gravado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora