Como gerar classes a partir de um schema XML.

Salve, salve galera,

Muita gente já precisou em algum momento gerar um classe que representasse um schema XML para poder utiliza-la como Model em alguma aplicação. Hoje em dia com a crescente demanda por emissão de documentos fiscais eletrônicos  (NFe, CTe, MDFe) a implementação nos sistemas legados tem se tornado alta.

Porem temos um problema muito grande, o schema XML da NFe por exemplo , tem muitas tags, e tipos complexos, o que demanda muito tempo de escrita de codigo, para minimizar (nao eliminar :D) esse problema, temos um recurso muito interessante no Visual Studio que nos permite criar uma classe apartir de um schema XML. Vamos ver ???

Primeiramente precisamos de um schema XML para trabalhar, nesse caso vou utilizar o schema atual da NFe.

Schema1

Tendo escolhido nosso schema, precisaremos abrir o Prompt de Comando do Visual Studio e nos dirigirmos ate a pasta onde se encontram esses schemas, no meu caso, esta nesse caminho

C:ProgramDataMicrosoftWindowsStart MenuProgramsMicrosoft Visual Studio 2012Visual Studio Tools

Schema2

Agora, para criarmos nossa classe basta utilizarmos o seguinte comando:


xsd.exe xmldsig-core-schema_v1.01.xsd nfe_v2.00.xsd /c

Teremos o seguinte resultado.

Schema3

Agora basta adicionarmos a classe gerada (que fica a principio com o mesmo nome do schema utilizado) e utiliza-la.

Segue um printzinho para termos uma ideia.

Schema4

 

Pessoal de uma maneira bem simples , temos uma classe Model do nosso schema, lembrando que, poderemos ter diferenças de funcionamento a cada conteúdo de schema (tipos complexos, e tudo mais). Mas isso já ajuda bastante.

Por hoje paro por aqui, espero ter ajudado.

 

 
Comments

Bacana Guilherme. consegui gerar as classes. Tenho um sistema webservice que trabalha com os schemas da tiss ANS. Já trabalhou com isso ?

Boa tarde,
Rapaz nunca trabalhei com esses processos não. Mas está tendo algum problema ? Qualquer coisa manda ae que vejo onde posso ajudar.

Att.

Não estou conseguindo referenciar a classe que gerei em meu projeto. Como inserir esta classe no projeto, já que não foi criada dentro do mesmo ?

Boa tarde, acerta as namespaces, e adiciona a classe dentro do projeto (bom e velho CTRL + C / CTRL + V).

Bacana Guilherme. Resolveu. Agora só preciso popular essas classes e gerar o xml serializado.

Muito legal o artigo, consegui gerar com sucesso a classe, porem nao sei como preencher as tags que podem aparecer N vezes, por exemplo a infNFe.ide.NFref (dentro dela existirão N referencias de ECF ou NFe ou CTe, etc) vc poderia me ajudar com um exemplo de preenchimento dessa tag?

guilhermecardoso

Igor boa noite, essa tag que você comentou ela não é um List ou IList ?