Ir para conteúdo

POWERED BY:

Arquivado

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

Willian Aquino

[Resolvido] Usando Api Dom XML e PHP

Recommended Posts

Boa tarde,

 

Pessoa é o seguinte, estou tentando ler um arquivo .csv para transforma-lo em um XML para depois fazer um trampo de SEO com ele, para ajudar para meu site estar melhor colocado no google, depois de várias tentativas descobri que o PHP 5 tem uma API DOM para gerar XML em PHP...

Conseguir gerar um XML padrão de boa sem problemas mas agora quero deixar a coisa mais dinâmica.

Irei ler um arquivo .csv que irei abrir ele e com isso irei ler ele e gerar o xml com os links das páginas...mais ou menos assim


<Destinos>

  <Links>
    <URL>http://exemplo.com.br/teste.php</URL>
  </Links>

</Destinos>

Mas imagina isso para 1 mil páginas

Não da para ficar fazendo na mão né !!!

 

Fiz o código e esta dando erro, não manjo muito e por isso se alguém poder me ajudar fico agradecido

 

 

Obrigado !!!

 

Segue o código !!!

 



<?php

	function AddLinks($document, $url, $data){
		$URL  = $document->createElement("URL");  			// Cria nó URL
		$link = $document->createElement("LINK", $link); 	// Cria No filho link
		$data = $document->createElement("DATA", $data); 	// Cria nó filho data
		
		$URL->appendChild($linkElm);	// add elementos no root
		$URL->appendChild($dataElm);	// add elementos no root
		
		return $URL;
	}
		 
		$dom = new DOMDocument("1.0", "ISO-8859-1");
		$dom->preserveWhiteSpace = false;
		$dom->formatOutput = true;
		 
		$root = $dom->createElement("Destinos");

		$arquivo = fopen ("teste.csv","r");
		$data = date("d.m.y G:i:s");
		
		while (($array = fgetcsv($arquivo, 1000, ",")) !== FALSE) {
					
			foreach ($array as $key => $valor) {
				//utilizando a funcao para criar urls
				$urls[$key] = AddLinks($dom, $valor, $data);
				$root->appendChild($urls);
			}
		}
 
		$dom->appendChild($root);
		$dom->save("destinos.xml"); 		//salvando o arquivo
		header("Content-Type: text/xml");
		echo $dom->saveXML(); 			//mostrar dados na tela
			
			 
?>

 

Erro !!!

 

Erro no processamento de XML: caracteres sem utilidade após um elemento do documento
Posição: http://localhost/Testes/ler_cvs.php
Número da linha 2, coluna 1:<b>Warning</b>:  DOMNode::appendChild() expects parameter 1 to be DOMNode, null given in <b>C:\wamp\www\Testes\ler_cvs.php</b> on line <b>8</b><br />
^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian Aquino, você não leu a mensagem de erro que foi gerada:

 

<b>Warning</b>: DOMNode::appendChild() expects parameter 1 to be DOMNode, null given in <b>C:\wamp\www\Testes\ler_cvs.php</b> on line <b>8</b>

 

Significa que você está tentando adicionar um null quando deveria adicionar um DOMNode, se você observar seu código, você verá que de fato você está tentando adicionar null já que está adicionando uma variável que não existe:

 

$link = $document->createElement("LINK", $link); 	// Cria No filho link
$data = $document->createElement("DATA", $data); 	// Cria nó filho data
		
$URL->appendChild($linkElm);	// add elementos no root
$URL->appendChild($dataElm);	// add elementos no root

Você criou as variáveis $link e $data, mas está tentando adicionar $linkElm e $dataElm.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Jão Batista !!!

 

Coloquei agora mas deu erro novamente !!!!

 


Erro no processamento de XML: caracteres sem utilidade após um elemento do documento
Posição: http://localhost/Testes/ler_cvs.php
Número da linha 2, coluna 1:<b>Warning</b>:  DOMNode::appendChild() expects parameter 1 to be DOMNode, array given in <b>C:\wamp\www\Testes\ler_cvs.php</b> on line <b>30</b><br />
^

Mas o que eu tenho dúvida mesmo é no foreach... não sei se o jeito que fiz está realmente certo, se ele está add os valores corretos que eu acho que está...

 

      foreach ($array as $key => $valor) {
	//utilizando a funcao para criar urls
	$urls[$key] = AddLinks($dom, $valor, $data);
      }

Porque para mim toda vez que ele passar pelo foreach no indice tal , ele vai mandar o valor que será a url na varialvel $urls na posição 1, 2, 3 etc

 

Isso está certo mesmo? Como poderia testar ???

 

Obrigado !!!!

 

João,

 

Eu estou fazendo alguns testes e acabei de fazer o foreach assim

 


foreach ($array as $key => $valor) {
    //utilizando a funcao para criar urls
    $urls[$key] = AddLinks($dom, $valor, $data);
    $root[$key]->appendChild($urls);
}

Porque para mim a variavel $urls no posição [$key] vai receber a função AddLink com os nós filhos de $URL link e data

E $root[$key]->appendChild($urls); criar um novo no filho url

 

Ai deu erro...

 

Fatal error: Cannot use object of type DOMElement as array in C:\wamp\www\Testes\ler_cvs.php on line 28

Fala que não posso usar o objeto DOmElement no array...

 

Então como eu posso passar esse valor sem ser por um arry? Ou pode e a lógica está errada?

 

Obrigado !!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Consegui !!!!!!

 

Era 2 erro besta por falta de conhecimento mesmo, estava querendo passar uma varialvel $root[$key] mas na verdade tinha que passar um objeto $root,

acho que é isso :) e na funçã estava passando um valor errado e sempre ficava vazio. Quero agradecer a você João Batista e o Beraldo por ter me ajudado antes, valeu mesmo.

 

 

Abraços !!!!

 


function AddLinks($document, $link, $data){
		$URL  = $document->createElement("URL");  			// Cria nó URL
		$link = $document->createElement("LINK", $link); 	// Cria No filho link
		$data = $document->createElement("DATA", $data); 	// Cria nó filho data
		
		$URL->appendChild($link);	// add elementos no root
		$URL->appendChild($data);	// add elementos no root
		
		return $URL;
	}
		 
		$dom = new DOMDocument("1.0", "ISO-8859-1");
		$dom->preserveWhiteSpace = false;
		$dom->formatOutput = true;
		 
		$root = $dom->createElement("Destinos");

		$arquivo = fopen ("teste.csv","r");
		$data = date("d.m.y G:i:s");
		
		while (($array = fgetcsv($arquivo, 1000, ",")) != FALSE) {
			foreach ($array as $valor) {
				//utilizando a funcao para criar urls
				$url = AddLinks($dom, $valor, $data);	
				//$arr[$key]->appendChild($urls[$key]);
				$root->appendChild($url);
			}
		}
 
		$dom->appendChild($root);
		$dom->save("destinos.xml"); 		//salvando o arquivo
		header("Content-Type: text/xml");
		echo $dom->saveXML(); 				//mostrar dados na tela

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.