Ir para conteúdo

POWERED BY:

Arquivado

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

ilippe

[Resolvido] xml/php = Localizar node e alterar atributo com xpath

Recommended Posts

Olá pessoal. Ajudem-me please!

Resumo: Quero localizar um node e alterar o seu atributo, estou tentando fazer isso com simplexml e xpath, mas se você souber fazer com o DOM pode ser tb.

 

xml:

 

<?xml version="1.0" encoding="utf-8"?>
<agenda>
       <dados id="1" nome="imaster" site="forum.imasters.com.br"/>
<dados id="2" nome="uol" site="www.uol.com.br"/>	    
</agenda>

 

 

Para alterar um atributo com simplexml uso:

 

$xml = simplexml_load_file('t.xml');
$xml->dados['nome'] = 'Forum imaster';
echo $xml->asXML();

 

Mas com esse código eu altero o primeiro node do xml. Como faço para localizar o node com "id=2" e alterar o "nome"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já consegui..

 

Ai uma functionzinha..

 

function alteraAttribute($XML, $LINE, $ID, $ATTRIBUTE) { 

   $xmlDoc = new DOMDocument();    
   $xmlDoc->preserveWhiteSpace = true;              
   $xmlDoc->load($XML);          
   $xpath = new DOMXpath($xmlDoc); 
$nodeList = $xpath->query(sprintf('%s[@title="%s"]', $LINE, $ID)); 
foreach ($nodeList as $element) { 
foreach ($ATTRIBUTE as $attribute => $valor) 
{	
   $element->setAttribute($attribute, $valor);
}	
}
 $xmlDoc->save($XML);

 if (option){ pbaxml_info(option, TitleBanner); }
}

$NewAttribute = array ('link' =>  $_POST['newlink'], 'src' => $_POST['newimagem'], 'title' => $_POST['newlink']);

alteraAttribute('arquivo.xml', 'item', 'NOMEDONODE', $NewAttribute);

 

$XML = O arquivo XML

$LINE = O promeiro nome do NODE que procura (exemplo: <item>)

$ID = O nome do NODE (exemplo: <item title="NOMEDONODE")

$ATTRIBUTE = O atributo que deseja alterar.

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.