Ir para conteúdo

POWERED BY:

Arquivado

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

Pedro B

Ler diversos arquivos XML

Recommended Posts

Boa tarde!

estou precisando que esse script leia todos os XML's de certa pasta (são mais de 350.000). Gostaria de saber oque tenho que fazer pra fazer que ele leia todos.

<?php
//Ler Arquivos TESTE5.XML
$doc = new DOMDocument();
//Nome do XML
$doc->load( 'teste5.xml' );

//Entra dentro da Tabela "Emit"
$books = $doc->getElementsByTagName( "emit" );
foreach( $books as $book )
{
$nomes = $book->getElementsByTagName( "xNome" );
$nome = $nomes->item(0)->nodeValue;

$nfants = $book->getElementsByTagName( "xFant" );
$nfant = $nfants->item(0)->nodeValue;

$cnpjs = $book->getElementsByTagName( "CNPJ" );
$cnpj = $cnpjs->item(0)->nodeValue;

$lugares = $book->getElementsByTagName( "xLgr" );
$lugar = $lugares->item(0)->nodeValue;

$bairros = $book->getElementsByTagName( "xBairro" );
$bairro = $bairros->item(0)->nodeValue;

$ceps = $book->getElementsByTagName( "CEP" );
$cep = $ceps->item(0)->nodeValue;


//Entra dentro da Tabela "IDE"
$books = $doc->getElementsByTagName( "ide" );
foreach( $books as $book )
{
//Pegar Data da NFe
$datesEmi = $book->getElementsByTagName( "dEmi" );
$emi = $datesEmi->item(0)->nodeValue;

$nNOTAs = $book->getElementsByTagName( "nNF");
$nNOTA = $nNOTAs->item(0)->nodeValue;
}

//Mostra o conteudo das variaveis na tela:
echo "-----------------------------------------------------------------------------------------ORIGEM----------------------------------------------------------------------------------------";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<b>Numero da Nota:</b> $nNOTA";
echo "<br>";
echo "<b>Nome:</b> $nome";
echo "<br>";
echo "<b>Nome Fantasia:</b> $nfant";
echo "<br>";
echo "<b>CNPJ:</b> $cnpj";
echo "<br>";
echo "<b>Endereço:</b> $lugar";
echo "<br>";
echo "<b>Bairro:</b> $bairro";
echo "<br>";
echo "<b>CEP:</b> $cep";
echo "<br>";
echo "<b>Data de Emissão:</b> $emi";
}
//Destinatario
echo "<br>";
echo "<br>";
echo "<br>";
echo "----------------------------------------------------------------------------------DESTINATARIO----------------------------------------------------------------------------------";
echo "<br>";
echo "<br>";
echo "<br>";
$books = $doc->getElementsByTagName( "dest" );
foreach( $books as $book )
{

$nomes2 = $book->getElementsByTagName( "xNome" );
$nome2 = $nomes2->item(0)->nodeValue;

$cnpjs2 = $book->getElementsByTagName( "CNPJ" );
$cnpj2 = $cnpjs2->item(0)->nodeValue;

$lugares2 = $book->getElementsByTagName( "xLgr" );
$lugar2 = $lugares2->item(0)->nodeValue;

$bairros2 = $book->getElementsByTagName( "xBairro" );
$bairro2 = $bairros2->item(0)->nodeValue;
}
//Entrar dentro da tabela ICMSTot
$books = $doc->getElementsByTagName( "ICMSTot" );
foreach( $books as $book )
{
//Pegar Data da NFe
$vNFs = $book->getElementsByTagName( "vNF" );
$vNF = $vNFs->item(0)->nodeValue;

}
echo "<b>Nome:</b> $nome2";
echo "<br>";
echo "<b>CNPJ:</b> $cnpj2";
echo "<br>";
echo "<b>Endereço:</b> $lugar";
echo "<br>";
echo "<b>Bairro:</b> $bairro";
echo "<br>";
echo "<b>CEP:</b> $cep";
echo "<br>";
echo "<b>Valor da NF R$:</b> $vNF";

//conexão com MySQL
$servername = "localhost";
$username = "root";
$password = "xxxx";
$dbname = "xxxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO J_Emit (nNF, Nome, Nome_Fant, CNPJ, Adress, Bairro, CEP, nEmit)
VALUES ('$nNOTA', '$nome', '$nfant', '$cnpj', '$lugar', '$bairro', '$cep', '$emi')";

echo "<br>";
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

?>

eu só vi exemplos de como ler uma X quantidade de arquivos, seria possivel deixar isso ilimitado?

Atenciosamente,

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem diversas soluções, mas acho que a mais em conta é GlobIterator, pois você pode ler arquivos conforme um padrão.

$iterator = new GlobIterator('caminho/ate/a/pasta/*.xml');

foreach ($iterator as $item) {
    echo $item;
}

Item será o nome do arquivo para interpretar.

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.