ler xml gerado a partir de um clientDataset em Delphi.

13/08/2012

0

Bom dia galera!
Estou iniciando alguns projetos em C#. Tenho um sistema em Delphi no qual utilizo o ClientDataSet exportando para xml e gravo os dados na base de dados. Agora um sistema em C# preciso ler essas informaçoes para tratá-la.. Porém todos os exemplos que pesquisei na web não funcionaram(pode ser claro pela minha falta de experiencia na linguagem).
segue abaixo o xml.

?xml version=1.0 standalone=true?
-DATAPACKET Version=2.0-METADATA-FIELDSFIELD fieldtype=dateTime attrname=DATA/FIELD fieldtype=string attrname=USUARIO WIDTH=20/FIELD fieldtype=string attrname=TIPO WIDTH=10/FIELD fieldtype=string attrname=CID WIDTH=5/FIELD fieldtype=string attrname=CID_DESC WIDTH=265/FIELD fieldtype=string attrname=MORFOLOGICO WIDTH=120/FIELD fieldtype=i4 attrname=TUMORID/FIELD fieldtype=i4 attrname=TNM_SISTEMAID/FIELD fieldtype=i4 attrname=TNM_TUMORID/FIELD fieldtype=i4 attrname=TNM_NODOID/FIELD fieldtype=i4 attrname=TNM_METASTASEID/FIELD fieldtype=i4 attrname=TNM_GRAUID/FIELD fieldtype=string attrname=TIPOTUMOR WIDTH=60/FIELD fieldtype=string attrname=SISTEMA WIDTH=70/FIELD fieldtype=string attrname=TUMOR WIDTH=2/FIELD fieldtype=string attrname=NODO WIDTH=2/FIELD fieldtype=string attrname=METASTASE WIDTH=2/FIELD fieldtype=string attrname=GRAU WIDTH=2/FIELD fieldtype=i4 attrname=HEMATOLOGICOID/FIELD fieldtype=i4 attrname=SUBHEMATOLOGICOID/FIELD fieldtype=string attrname=DESC_TUMOR WIDTH=510/FIELD fieldtype=string attrname=DESC_NODO WIDTH=410/FIELD fieldtype=string attrname=DESC_METASTASE WIDTH=120/FIELD fieldtype=string attrname=DESC_GRAU WIDTH=100/FIELD fieldtype=string attrname=DESC_HEMATO WIDTH=190/FIELD fieldtype=string attrname=DESC_SUBHEMATO WIDTH=190/FIELD fieldtype=string attrname=ESTADIO WIDTH=12/FIELD fieldtype=dateTime attrname=DATA_RECIDIVA/FIELD fieldtype=dateTime attrname=DATA_PD//FIELDSPARAMS CHANGE_LOG=1 0 4 2 1 8//METADATA-ROWDATAROW ESTADIO=I DESC_HEMATO=I Envolvimento de uma única região linfática, ou estrutura linfóide, ou um único local extralinfático HEMATOLOGICOID=32 SISTEMA=HEMATOLÓGICO TIPOTUMOR=LINFOMAS NÃO HODGKIN TNM_SISTEMAID=57 TUMORID=32 CID_DESC=GRANDES CÉLULAS (DIFUSO) CID=C83.3 TIPO=PRIMÁRIO USUARIO=CRISTIANO.FERNANDES DATA=20120723T18:40:36548 RowState=5/ROW ESTADIO=II DESC_HEMATO=II Envolvimento de duas ou mais regiões linfáticas do mesmo lado do diafragma HEMATOLOGICOID=33 SISTEMA=HEMATOLÓGICO TIPOTUMOR=LINFOMAS NÃO HODGKIN TNM_SISTEMAID=57 TUMORID=32 CID_DESC=GRANDES CÉLULAS (DIFUSO) CID=C83.3 TIPO=PRIMÁRIO USUARIO=CRISTIANO.FERNANDES DATA=20120723T18:40:36548 RowState=12//ROWDATA/DATAPACKET


obrigado galera
Eric Miranda

Eric Miranda

Responder

Posts

13/08/2012

Deivison Melo

O XML que o clientdataset cria é um outro tipo diferente do padrão UTF-8.
Responder

13/08/2012

Eric Miranda

Tem alguma forma de eu ler isso no c#
Responder

13/08/2012

Eric Miranda

galera de acordo com o arquivo xml que mostrei acima, eu estou quase chegando... mas travo no final..

usei este código abaixo
 string arquivo = @D:\temp.xml;

            //Carrega o arquivo XML

                  XmlTextReader linha = new XmlTextReader(arquivo);


                  while (linha.Read())
                  {

                      if( linha.Name == ROW )

                          // Escreve o valor da linha.

                          temp = linha.ToString();

                  }

até chega a achar a linha ROW, mas aí preciso pegar os valores... aí que não consigo..

com o código abaixo chego quase no mesmo ponto

            XElement xml = XElement.Load( @D:\temp.xml );
            string temp = null;
            foreach( XElement x in xml.Elements() )
            {
                if (x.Name == ROWDATA)
                {
                    temp = x.Attribute(ESTADIO).Value;
                }
            }
Responder

13/08/2012

Deivison Melo

Você deverá solicitar que o desenvolvedor que fez isso em delphi que utilize os componentes para criação e leitura do xml de forma nativa (UTF-8) e aí vc conseguirá manipular de forma normal.
Responder

14/08/2012

Eric Miranda

Bom dia galera. Cheguei no resultado que queria. não sei se da forma correta ou mais elegante mas funcionou.
Valeu Deivison pela ajuda.
Segue abaixo o código.
            StringBuilder sql = new StringBuilder();
             sql.Append( SELECT CID_XML  );
             sql.Append( FROM RES_ANAMNESE  );

             string strConn = ConfigurationManager.AppSettings[FbConnectionString];
             FbConnection conn = new FbConnection( strConn );
             conn.Open();
             FbCommand cmd = new FbCommand( sql.ToString(), conn );

             FbDataReader reader = cmd.ExecuteReader();
             ListCidXml listaXML = new ListCidXml();
             string cid;
             string datatemp;
             while( reader.Read() )
             {
                 cid = reader.GetString( 0 );
                 cid = cid.Replace( \\\, \ );
                 cid = cid.Replace( \0,  );


                 //Carrega o arquivo XML
                 XmlTextReader linha = new XmlTextReader(new StringReader(cid));

                 // Enquando existir linha no arquivo fa‡a

                 while( linha.Read() )
                 {
                     // Se for uma linha de conteudo apresente do valor da linha.
                     if( linha.Name == ROW )
                     {
                         // Escreve o valor da linha.
                         datatemp = linha.GetAttribute( DATA ).ToString();
                         datatemp = datatemp.Substring( 6, 2 ) + / + datatemp.Substring( 4, 2 ) + / + datatemp.Substring( 0, 4 ) +   +
                                     datatemp.Substring( 9, 8 );
                         CidXml cidXml = new CidXml() 
                         { 
                            Data = Convert.ToDateTime( datatemp ),
                            Cid = linha.GetAttribute( CID ).ToString(),
                            Estadio = linha.GetAttribute( ESTADIO ).ToString()
                         }; 
                     }
                 }
             }
Responder

14/08/2012

Guinther Pauli

Eric

Experimente dar uma olhada no XML Mapper do Delphi, ele pode converter os XML Data Packets do ClientDataSet para um formato XML que pode ser lido diretamente em C# até mesmo por um DataSet do ADO.NET, ou por um XmlTextReader.

Att,

--
Guinther Pauli
Delphi Certified Professional - 3,5,6,7,2005,2006,Delphi Web,Kylix,XE
Microsoft Certified Professional - MCP,MCAD,MCSD.NET,MCTS,MCPD (C#, ASP.NET, Arquitetura)
Colaborador Editorial Revistas .net Magazine e ClubeDelphi
http://gpauli.com
http://www.facebook.com/guintherpauli
http://www.twitter.com/guintherpauli
Responder

14/08/2012

Deivison Melo

Complementando o que o Guinther mencionou, segue link:

http://edn.embarcadero.com/br/article/37321
Responder

14/08/2012

Deivison Melo

Há ainda:

http://www.caiooliveira.com.br/?p=65

PS. Lembrando que Para criar a interface delphi (caso for vc, ou solicitar a outro desenvolvedor que utilize o componente XMLTransformProvider, o arquivo XML pode ser transformado para uma outra estrutura desejada, e convertida para o formato que possa ser utilizado em conjunto com o ClientDataSet para manipular os dados como se estivessem em uma tabela de um banco de dados (Link do exemplo anterior: http://edn.embarcadero.com/br/article/37321).

Responder

15/08/2012

Eric Miranda

Valeu Guinther e Deivison pelas dicas..
abs
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar