Validador XML para a NFe em php

131 views
Skip to first unread message

Guilherme Moraes

unread,
May 19, 2009, 8:07:03 AM5/19/09
to list...@googlegroups.com, lista...@googlegroups.com
Pessoal,
Bom dia!

Alguém tem um exemplo de Validador para o XML da NFe em php? Encontrei um genérico, tentei adicionar os arquivos xsd que existem na PL_005a, mas não sei se o esquema está certo.

Estou tentando validar eles com este exemplo que montei, de validação, onde eu pego o arquivo XML, já assinado digitalmente, e submeto o mesmo a validação do XSD:

<?php
 if(!defined('sugarEntry'))define('sugarEntry', true);

libxml_use_internal_errors(true);

/* Cria um novo objeto da classe DomDocument */
$objDom = new DomDocument();

/* Carrega o arquivo XML */
$objDom->load("output/NFe.xml");

/* Tenta validar os dados utilizando o arquivo XSD */
if (!$objDom->schemaValidate("PL_005a/nfe_v1.10.xsd")) {

    $arrayAllErrors = libxml_get_errors();
    /* Cada elemento do array $arrayAllErrors será um objeto do tipo LibXmlError */
    print_r($arrayAllErrors);

} else {

    /* XML validado! */
    echo "XML obedece às regras definidas no arquivo XSD!";
}
?>

E a resposta que tenho é esta:

Array ( [0] => LibXMLError Object ( [level] => 2 [code] => 1845 [column] => 0 [message] => Element 'NFe': No matching global declaration available for the validation root. [file] => /usr/local/Zend/apache2/htdocs/projects/nfe/output/NFe.xml [line] => 1 ) [1] => LibXMLError Object ( [level] => 2 [code] => 1845 [column] => 0 [message] => Element 'NFe': No matching global declaration available for the validation root. [file] => /usr/local/Zend/apache2/htdocs/projects/nfe/output/NFe.xml [line] => 1 ) [2] => LibXMLError Object ( [level] => 2 [code] => 1845 [column] => 0 [message] => Element 'NFe': No matching global declaration available for the validation root. [file] => /usr/local/Zend/apache2/htdocs/projects/nfe/output/NFe.xml [line] => 1 ) )

Já no site da SEFAZ só volta falha no SCHEMA XML....

E vc fica desnorteado.

Agradeço a ajuda que tenho recebido do grupo!

Abs,
Guilherme Moraes
Lampada Global Services

Walker de Alencar

unread,
May 20, 2009, 8:34:36 AM5/20/09
to PHPBR
Sua mensagem está correta,

Pra facilitar sua vida, onde vc está usando: print_r($arrayAllErrors);
use:

echo "<pre>".print_r($arrayAllErrors,true)."</pre>";

assim, sua mensagem vai ficar +/- assim:
[level] => 2
[code] => 1845
[column] =>0
[message] => Element 'NFe': No matching global declaration
available for the validation root.
[file] => /usr/local/Zend/apache2/htdocs/projects/nfe/output/
NFe.xml
[line] => 1


;)

Guilherme Moraes

unread,
May 20, 2009, 10:06:02 AM5/20/09
to lista...@googlegroups.com
O link da SEFAZ/RS que o Fernando passou é show.
E a alteração passada pelo Walker, mudou muito bem para saber internamente como está o arquivo.

Estou agora me batendo com a assinatura... se a coisa ficar preta, eu posto aqui. Tem um parceiro já me ajudando com a assinatura...

Obrigado pessoal.
Vlw
Guilherme Moraes.
Lampada Global.

2009/5/20 Walker de Alencar <walker...@gmail.com>

Guilherme Moraes

unread,
May 20, 2009, 10:12:20 AM5/20/09
to lista...@googlegroups.com
P.S: O erro da assinatura é:

    [6] => LibXMLError Object
(
[level] => 2
[code] => 1818
[column] => 0
[message] => Internal error: xmlSchemaIDCRegisterMatchers, Could not find an augmented IDC item for an IDC definition.

[file] => /usr/local/Zend/apache2/htdocs/projects/nfe/output/teste.xml
[line] => 1
)

[7] => LibXMLError Object
(
[level] => 2
[code] => 1818
[column] => 0
[message] => Internal error: xmlSchemaValidateElem, calling xmlSchemaValidateElemDecl().

[file] => /usr/local/Zend/apache2/htdocs/projects/nfe/output/teste.xml
[line] => 1
)

[8] => LibXMLError Object
(
[level] => 2
[code] => 1818
[column] => 0
[message] => Internal error: xmlSchemaDocWalk, calling xmlSchemaValidateElem().

[file] => /usr/local/Zend/apache2/htdocs/projects/nfe/output/teste.xml
[line] => 1
)
Obrigado.
Abs

2009/5/20 Guilherme Moraes <guism...@gmail.com>
Reply all
Reply to author
Forward
0 new messages