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.509 ]

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

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

Impressão remota via WEB

Phperl, minha gambiarra para usar Perl como se fosse PHP

Instalando Slackware 11.0 em um pendrive

Leitura recomendada

Solução para provedores - Receber aviso no celular quando ocorrer perda de pacote, hosts parados ou pacotes duplicados

Fazendo o bash contar piadas

KDialog com Shell Script - Conversão de slides JPG para projetores com suporte a miniaturas de imagens

Alguns recursos do BASH para você utilizar em seus programas

Backup em HDs da rede

  
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