Sei sulla pagina 1di 22

Pesquisar SPED Brasil Procurar

Registre-se
Acessar
Rede Virtual de troca de informaes sobre o SPED
Home
Meu Perfil
Membros
Eventos
Frum
Enquetes
Todas as Discusses
Meus tpicos
Adicionar
Gerando Classes Microsoft .NET a partir de XSD
Publicado por GIL em 7 fevereiro 2014 s 9:00 em e-SOCIAL
Exibir tpicos
Ol pessoal!

Hoje vamos aprender a gerar classes utilizando arquivos XSD em tecnologia Microsoft .NET. Para isso vamos utilizar os schemas que disponibilizei
no post Introduo bsica sobre os arquivos XSD, baixe e salve os arquivos XSD em um mesmo diretrio em sua mquina.

Em um outro post vamos gerar arquivos XML utilizando essas classes respeitando assim todas as definies do XSD que originou a mesma.







Ferramenta XSD.exe
Vamos utilizar uma ferramenta de definio de esquema XML (XSD.exe) da Microsoft, mais informaes podem ser adquiridas em
http://msdn.microsoft.com/pt-br/library/x6c1kb0s(v=vs.110).aspx .

Localize a ferramenta XSD.exe em seu computador http://msdn.microsoft.com/pt-br/library/dd233110(v=vs.110).aspx , no meu caso em C:\Program
Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools:
Caso voc no tenha localizado a ferramenta, instale em seu computador o Visual Studio em verses 2008, 2010 ou 2012. Abra o prompt de comando
na pasta de ferramentas do Visual Studio, segue:
Na janela do prompt de comando digite o seguinte comando:

cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools

e d Enter:
A partir desse momento j possvel executar a ferramenta xsd.exe, digite o comando:

xsd.exe /?

E d Enter, um Help sobre a ferramenta apresentada com as linhas de comando e sua descrio, veja:
COMO CRIAR UM XSD DE UM XML EXISTENTE
Salvei os meus Schemas no diretrio D:\schemas em meu computador, segue:
Digite o seguinte comando:
xsd D:\schemas\Exemplo.xsd /classes /language:cs /f /out:D:\schemas
e d Enter. Uma classe Microsoft .NET ser gerada na pasta D:\schemas, segue:
Onde as propriedades da linha de comando: xsd D:\schemas\Exemplo.xsd /classes /language:cs /f /out:D:\schemas tem os seguintes significados:

xsd trata-se da ferramenta para gerar schemas a partir de uma XSD;
D:\schemas\Exemplo.xsd trata-se do arquivo XSD vlido que contm o elemento root (principal) do esquema;
/classes trata-se do comando que informa que o arquivo de sada ser uma classe.
/language:cs trata-se do comando que informa que a classe gerada ser em tecnologia c# .NET.
/f trata-se do comando para a gerao de campos em vez de propriedades. Por padro, as propriedades so geradas.
/out:D:\schemas trata-se do diretrio onde a classe gerada ser salva.

Segue a classe gerada: Exemplo.cs

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18052
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

//
// This source code was auto-generated by xsd, Version=4.0.30319.17929.
//


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.esocial.gov.br/padroes/schemas")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.esocial.gov.br/padroes/schemas", IsNullable=false)]
public partial class eventoEsocial {

/// <remarks/>
public cabecalhoEvento cabecalho;

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("empregadorParaOrgao", typeof(ct_eventos))]
[System.Xml.Serialization.XmlElementAttribute("orgaoParaEmpregador", typeof(eventoEsocialOrgaoParaEmpregador))]
public object Item;

/// <remarks/>
public eventoEsocialEpilogo epilogo;
}

[...]


Ento isso pessoa, no prximo POST vamos criar uma solution no Visual Studio com os mtodos necessrio para a gerao do XML, utilizando a
classe gerada nesse post.
Para acompanhar os meus post, criei a tag: GILBELEI
Abrao a todos!
Tags: ESOCIAL, GILBELEI, HASH, MD5, WEBSERVICES, WSDL, XML, XSD
Gostei
2 membros marcaram isto como favorito
Compartilhar Twitter
Exibies: 1434
Anexos
Arquivos XSD.zip, 168 KB
Responder esta
0 Curtir
Respostas a este tpico
Permalink Respondida por Paulo C. DAmore em 7 fevereiro 2014 at 9:39
Caro Gilbelei,
para gerar XSD partir de um XML existente, posso utilizar uma ferramenta on-line ?
usei esta: http://xmlgrid.net/xml2xsd.html
e obtive o anexo partir de um XML de Inicial Empregador do e-SOCIAL gerado pelo meu aplicativo.
agradeo sua ateno.
Saudaes.
Anexos
SCHEMA01.xsd, 24 KB
Responder
Permalink Respondida por GIL em 7 fevereiro 2014 at 9:41
Obrigado Paulo por contribuir!

Paulo C. DAmore disse:
Caro Gilbelei,
para gerar XSD partir de um XML existente, posso utilizar uma ferramenta on-line ?
usei esta: http://xmlgrid.net/xml2xsd.html
e obtive o anexo partir de um XML de Inicial Empregador do e-SOCIAL gerado pelo meu aplicativo.
agradeo sua ateno.
Saudaes.
Responder
Permalink Respondida por Adriano dos Santos Fernandes em 7 fevereiro 2014 at 11:59
Paulo,
Voc pode ter gerado um xsd, mas no acredito que ele servir para muita coisa.
Porque a partir do xml, no h como inferir as regras do xsd com preciso. Por exemplo, voc pode ter um campo do xml com o valor 1, e ele vai
deduzir como numrico, porm esse campo pode ser alfanumrico.
Tambm no tem como deduzir tamanhos de campos, quantidade mnima/mxima de ocorrncias, etc.
Paulo C. DAmore disse:
Caro Gilbelei,
para gerar XSD partir de um XML existente, posso utilizar uma ferramenta on-line ?
usei esta: http://xmlgrid.net/xml2xsd.html
e obtive o anexo partir de um XML de Inicial Empregador do e-SOCIAL gerado pelo meu aplicativo.
agradeo sua ateno.
Saudaes.
Responder
Permalink Respondida por Paulo C. DAmore em 7 fevereiro 2014 at 13:57
Adriano,
vc tem toda a razo. O XSD exemplo que anexei no meu posto, pouco diz sobre o correspondente XML.
apenas fui atrs de um servio on-line e free para colaborar com o Gilbelei no seu artigo, em substituio ao XSD.EXE sugerido no mesmo.
na aplicao TXT2XML que desenvolvemos internamente, criamos um arquivo em TXT para cada evento, onde constam todas as regras para a
ferramenta gerar o XML respectivo, garantindo o nome das tags, a organizao e sequencia dos nodes, o tipo de dado (numrico, string, data
com 8, data com 6, valor numrico com ou sem decimais, tamanho mximo do campo, etc...etc...), e estamos tendo sucesso, obtendo inclusive o
certificado WELL FORMED nos editores de XML usuais. NOTA: tudo programado em BASIC Ms-DOS !!!
espero SOMAR aqui neste espao, OK ?
muito BOM !!!
abraos e obrigado.
DAmore, Paulo C.
Adriano dos Santos Fernandes disse:
Paulo,
Voc pode ter gerado um xsd, mas no acredito que ele servir para muita coisa.
Porque a partir do xml, no h como inferir as regras do xsd com preciso. Por exemplo, voc pode ter um campo do xml com o
valor 1, e ele vai deduzir como numrico, porm esse campo pode ser alfanumrico.
Tambm no tem como deduzir tamanhos de campos, quantidade mnima/mxima de ocorrncias, etc.
Paulo C. DAmore disse:
Caro Gilbelei,
para gerar XSD partir de um XML existente, posso utilizar uma ferramenta on-line ?
usei esta: http://xmlgrid.net/xml2xsd.html
e obtive o anexo partir de um XML de Inicial Empregador do e-SOCIAL gerado pelo meu aplicativo.
agradeo sua ateno.
Saudaes.
Responder
Permalink Respondida por GIL em 7 fevereiro 2014 at 14:40
Senhores,

A classe quando gerada utilizando a ferramenta XSD.exe composta de todas as regras contida no Schema inclusive enumeradores. Mais para
frente irei mostrar um projeto em C# .NET populando com dados em memria essa classe e gerando um XML a partir dela.

Tambm irei apresentar um projeto web em tecnologia c# .NET onde ao enviar o XML ele faz uma avaliao de sua estrutura de acordo com o
XSD do mesmo.

, Gil

Paulo C. DAmore disse:
Adriano,
vc tem toda a razo. O XSD exemplo que anexei no meu posto, pouco diz sobre o correspondente XML.
apenas fui atrs de um servio on-line e free para colaborar com o Gilbelei no seu artigo, em substituio ao XSD.EXE sugerido no
mesmo.
na aplicao TXT2XML que desenvolvemos internamente, criamos um arquivo em TXT para cada evento, onde constam todas as
regras para a ferramenta gerar o XML respectivo, garantindo o nome das tags, a organizao e sequencia dos nodes, o tipo de dado
(numrico, string, data com 8, data com 6, valor numrico com ou sem decimais, tamanho mximo do campo, etc...etc...), e estamos
tendo sucesso, obtendo inclusive o certificado WELL FORMED nos editores de XML usuais. NOTA: tudo programado em
BASIC Ms-DOS !!!
espero SOMAR aqui neste espao, OK ?
muito BOM !!!
abraos e obrigado.
DAmore, Paulo C.
Adriano dos Santos Fernandes disse:
Paulo,
Voc pode ter gerado um xsd, mas no acredito que ele servir para muita coisa.
Porque a partir do xml, no h como inferir as regras do xsd com preciso. Por exemplo, voc pode ter um campo do
xml com o valor 1, e ele vai deduzir como numrico, porm esse campo pode ser alfanumrico.
Tambm no tem como deduzir tamanhos de campos, quantidade mnima/mxima de ocorrncias, etc.
Paulo C. DAmore disse:
Caro Gilbelei,
para gerar XSD partir de um XML existente, posso utilizar uma ferramenta on-line ?
usei esta: http://xmlgrid.net/xml2xsd.html
e obtive o anexo partir de um XML de Inicial Empregador do e-SOCIAL gerado pelo meu aplicativo.
agradeo sua ateno.
Saudaes.
Responder
Permalink Respondida por Camilla Camatta em 26 fevereiro 2014 at 17:35
No sei se ser til para algum, mas segue como gerar, em C#, a classe via cdigo a partir do XSD
string xsdFileName = @"C:\teste\teste.xsd";
XmlSchema xsd;
using (FileStream stream = new FileStream(xsdFileName, FileMode.Open, FileAccess.Read))
{
xsd = XmlSchema.Read(stream, null);
}
XmlSchemas xsds = new XmlSchemas();
xsds.Add(xsd);
xsds.Compile(null, true);
XmlSchemaImporter schemaImporter = new XmlSchemaImporter(xsds);
CodeNamespace codeNamespace = new CodeNamespace("Generated");
XmlCodeExporter codeExporter = new XmlCodeExporter(codeNamespace);
List<XmlTypeMapping> maps = new List<XmlTypeMapping>();
foreach (XmlSchemaType schemaType in xsd.SchemaTypes.Values)
{
maps.Add(schemaImporter.ImportSchemaType(schemaType.QualifiedName));
}
foreach (XmlSchemaElement schemaElement in xsd.Elements.Values)
{
maps.Add(schemaImporter.ImportTypeMapping(schemaElement.QualifiedName));
}
foreach (XmlTypeMapping map in maps)
{
codeExporter.ExportTypeMapping(map);
}
RemoveAttributes(codeNamespace);
CodeGenerator.ValidateIdentifiers(codeNamespace);
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
string classe = "";
using (StringWriter writer = new StringWriter())
{
codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, new CodeGeneratorOptions());
classe = writer.GetStringBuilder().ToString();
}
Responder
Responder discusso
RSS
Bem-vindo a
SPED Brasil
Registre-se
ou acesse
2014 Criado por DW Novas Solues.
Badges | Relatar um incidente | Termos de servio

Potrebbero piacerti anche