XML de NF-e ou CT-e ou MDF-e - Como validar usando os pacotes de esquemas do Governo

Este artigo explica como fazer a validação de arquivos tipo XML, usando o aplicativo xmllint, e os pacotes de esquemas fornecidos pelo Governo.

[ Hits: 31.357 ]

Por: Arnaldo Luiz Estevao em 11/09/2012


Separando e executando o teste



Para os pacotes de esquemas do projeto MDF-e, vou deixar o link:
Ele irá fazer o download de um arquivo chamado "PL_MDFe_100.zip", que depois de compactado, irá revelar um conteúdo de vários arquivos tipo "xsd", mas, dos quais eu irei usar somente dois, neste artigo:
  • mdfe_v1.00.xsd
  • mdfeModalRodoviario_v1.00.xsd

Disponibilizo, ao final do artigo, o exemplo de um XML de MDF-e. Você deve copiar e colar o conteúdo dele em um arquivo chamado: mdfe.xml

A validação geral do documento, é feita então da seguinte maneira:

xmllint --noout -schema mdfe_v1.00.xsd mdfe.XML

Resultado:
tst.XML validates


Agora, se substituir o conteúdo da tag: <cMDF>00001123</cMDF>

Por:

<cMDF>1123</cMDF>


O que, segundo o manual, é um erro e retornaria: rejeição do tipo falha no esquema do MDF-e ao transmitir o arquivo para a SEFAZ.

xmllint --noout -schema mdfe_v1.00.xsd mdfe.xml

Veja a saída:
mdfe.xml:5: element cMDF: Schemas validity error : Element '{http://www.portalfiscal.inf.br/mdfe}cMDF': [facet 'pattern'] The value '1123' is not accepted by the pattern '[0-9]{8}'.
mdfe.xml:5: element cMDF: Schemas validity error : Element '{http://www.portalfiscal.inf.br/mdfe}cMDF': '1123' is not a valid value of the local atomic type.
mdfe.xml fails to validate


Por último, vou separar o XML referente à tag <infModal>, pelo fato de que por ser uma escolha, o conteúdo desta tag deve ser analisado em separado, usando o schema específico do modal.

Tenha em mente que, no exemplo anterior, ele irá simplesmente ignorar os erros contidos dentro desta tag.

Primeiro, separar o XML, e em seguida, você precisa substituir a tag <rodo> do mdfe.XML pelo xmlns padrão do projeto, no caso do MDF-e.

Substituir: <rodo>

Por:

<rodo xmlns="http://www.portalfiscal.inf.br/mdfe">


Faça isso num arquivo chamado modal.xml:

<rodo xmlns="http://www.portalfiscal.inf.br/mdfe">
<RNTRC>02852311</RNTRC>
<veicPrincipal>
<cInt>1</cInt>
<placa>HRA1467</placa>
<tara>13000</tara>
<capKG>10000</capKG>
<capM3>4000000</capM3>
<condutor>
<xNome>Arnaldo Luiz Estevao</xNome>
<CPF>12345678909</CPF>
</condutor>
</veicPrincipal>
</rodo>


Agora, é só efetuar o teste:

xmllint --noout -schema mdfeModalRodoviario_v1.00.xsd modal.xml

Isso retornaria:
modal.xml validates


Valeu!

Página anterior     Próxima página

Páginas do artigo
   1. Explicação
   2. Separando e executando o teste
   3. Arquivo mdfe.xml
Outros artigos deste autor

Impressão remota via WEB

Phperl, minha gambiarra para usar Perl como se fosse PHP

Instalando Slackware 11.0 em um pendrive

Autenticação mútua SSL em servidores de NF-e e CT-e

Leitura recomendada

Alguns recursos do BASH para você utilizar em seus programas

Automatizando a conexão com Internet via ADSL com PPPoE no OpenBSD

KeepAlive para conexão discada (ou não)

Impressora PDF via Samba para estações Windows

BigBashView, interface gráfica para o seu shell script

  
Comentários
[1] Comentário enviado por sandromt em 11/09/2012 - 11:22h

Muito bom seu artigo...estou querendo usar o xmllint para validar um xml de NF-e, mais esta dando o seguinte erro:
"NFe.xml:1: element NFe: Schemas validity error : Element '{http://www.portalfiscal.inf.br/nfe}NFe': No matching global declaration available for the validation root.
SAN.xml fails to validate"

Usei da seguinte forma "xmllint -noout -schema leiauteNFe_v2.00.xsd NFe.xml" ...esse xml esta assinado e valida no ste da sefaz-rs...inclusive esta ate autorizada....eu qureria usar essa regra para validar meus xml de nf-e....sabe me dizer como proceder?

[2] Comentário enviado por arnaldoestevao em 11/09/2012 - 11:32h

fica difícil responder sem analisar seu xml, essa mensagem significa que o xmlns da tag raiz não foi informada ou que não ha somente um único elemento raiz no XML, quando voce envia para a SEFAZ, a mensagem vai dentro um envelope soap que contem o xmlns, quando voce vai validar pelo xmllint precisa colocar dentro de uma tag raiz o xmlns padrão do projeto, como no exemplo do teste do modal

[3] Comentário enviado por sandromt em 11/09/2012 - 15:08h

Deu certo, estava usando o xsd errado...tem que ser o "nfe_v2.00.xsd" ...durante a validacao deu erro nas unidades dos itens, se tiver com dois caracteres da erro, entao eu alterei, tendo mais de dois da certo, o que é estranho pois é de uma nf autorizada hoje mesmo....mais deu certo :)

[4] Comentário enviado por haereticus em 12/09/2012 - 17:30h

Caramba meu sonho era ver escritórios contábeis (no qual trabalho) funcionando no linux. Maioria dos programas do governo pararam no windows XP que em breve nem suporte terá.

[5] Comentário enviado por als04545 em 10/02/2014 - 09:57h

Na tag abaixo, você gerar um hash. Estou desenvolvendo uma nota Mdfe, e gostaria de saber com quais informações do XML é gerado esse hash? É sha1?

<infMDFe versao="1.00" Id="MDFe50120900472038000167580000000000011412345678" >


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts