Gravar informações de XML no banco de dados - RESOLVIDO

Tenho um formulário de upload do XML do tipo Documento (nome do arquivo).

Após gravar o arquivo XML no diretorio file/doc do projeto do scriptcase, preciso programar no evento onAfterInsert um comando para ler o xml através do SimpleXml e gravar os dados em algumas tabelas.

Alguém pode mostrar como fazer o carregamento do arquivo e a leitura do XML?

Segue um exemplo
$dir = “C:/v81-scriptcase/wwwroot/scriptcase/app/Sat/bkp-nfe/”;

// Abre um diretorio
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if(substr($file,-3)==“xml”)
{
$arqv = $dir.$file;
$xml = simplexml_load_file($arqv);
echo $xml->det->prod->xProd."
";
$sqlI = “insert into produtos
(codigo, produto, ncm, um, vunit, origem, cst, d_e_l_e_t_
)
values
(’”.$xml->det->prod->cProd."’, ‘".$xml->det->prod->xProd."’, ‘".$xml->det->prod->NCM."’,
‘".$xml->det->prod->uCom."’,".$xml->det->prod->vUnCom.", ‘".$xml->det->imposto->ICMS->orig."’,
‘".$xml->det->imposto->ICMS->CST."’, ‘n’)";
sc_exec_sql($sqlI);
}

    }
    closedir($dh);
}

}

Muito obrigado, Rodrigo.

Mas o simplexml não funcionou muito bem. Ficava dando mensagem de tentativa de recuperação de atributo de um não-objeto.

Eu consegui fazer com a biblioteca DOM:

{nome_arquivo} é o nomé do campo que pega o nome do xml que foi armazenado por upload(nome do arquivo). Este código está no evento onAfterInsert.

[code]
//comando que pega a pasta de documentos do ambiente de desenvolvimento ou do servidor
$url = $this->Ini->path_doc."/".{nome_arquivo};
$doc = new DOMDocument();
$doc->load($url);

$produtos = $doc->getElementsByTagName( “prod” );
foreach( $produtos as $produto )
{
$nome1 = $produto->getElementsByTagName( “xProd” );
$nome = $nome1->item(0)->nodeValue;

$estoque1 = $produto->getElementsByTagName( “qCom” );
$estoque = $estoque1->item(0)->nodeValue;

$sqlI = “insert into produto
(nome, estoque)
values
(’”.$nome."’, ‘".$estoque."’)";
sc_exec_sql($sqlI);
}[/code]

O XML:


Acendedor Tramontina
3




Geladeira Dako
1

1 Curtida

Legal, quando se trata de mais de um item, deve-se usar mesmo o DOM.

Abraços

Bom dia…

Pessoal como habilita o simplexml_load_file() ?

abs

Ricardo Sena

No Debian acho que é somente fazer:
apt-get install SimpleXML

Obrigado Alexandre…porem estou usando a instalação padrão do scriptcase no windows…

Pelos fóruns e o manual do php, vi que no Windows a extensão simplexml já vem ativa por padrão.
http://php.net/manual/pt_BR/install.windows.extensions.php