XML
Formatos de Dados
XML (eXtensible Markup Language) representa dados através de elementos — tags abertas e fechadas, <tag>valor</tag> — que podem carregar atributos e conter outros elementos aninhados. É o formato usado por praticamente todo documento fiscal eletrônico brasileiro: NFe, NFC-e, CT-e e o NFS-e nacional.
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe35240112345678000199550010000000011000000015" versao="4.00">
<ide>
<cUF>35</cUF>
<natOp>Venda de mercadoria</natOp>
</ide>
</infNFe>
</NFe>Um XML é bem formado (well-formed) quando toda tag aberta é fechada e a estrutura segue a sintaxe do formato — o mínimo para qualquer parser conseguir lê-lo. Ser válido é mais exigente: significa bater contra um schema XSD publicado pelo autorizador, que define quais elementos existem, obrigatoriedade, tipo e tamanho de cada campo (ex.: cUF como código numérico de 2 dígitos). Um XML de NFe precisa ser as duas coisas antes de ser assinado e transmitido — falhar no XSD rejeita o lote sem nem chegar às regras de negócio.
XML também é case sensitive: <UF>, <uf> e <Uf> são três elementos diferentes para o parser, e o mesmo vale para nomes de atributo e para os valores de um atributo que declare um tipo enumerado no schema. É por isso que um XML de NFe fecha cada tag com exatamente a mesma caixa da abertura (<cUF>...</cUF>, nunca <cUF>...</CUF>) — divergência de caixa entre abertura e fechamento nem chega a ser "bem formado".
O atributo xmlns declara o namespace do documento — evita que uma tag como <ide> de um XML de NFe seja confundida com uma tag de mesmo nome em outro vocabulário; é comum um mesmo XML fiscal combinar mais de um namespace (o da NFe em si e o de um evento anexado, por exemplo).
Um XML fiscal nunca é só estrutura — ele também carrega:
- Uma declaração de codificação (
encoding="UTF-8") que precisa bater com os bytes reais do arquivo — veja Charset & Encoding. - Caracteres reservados (
& < > " ') que precisam virar entities dentro do conteúdo, senão a estrutura quebra — veja Caracteres Especiais. - Uma assinatura digital obrigatória, calculada em cima do hash do conteúdo — veja Hash e Assinatura Digital de XML.
Use o formatador e validador de XML para conferir se a estrutura de um documento fiscal está bem formada antes de seguir para assinatura.