ler xml gerado a partir de um clientDataset em Delphi.
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.
obrigado 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
Curtidas 0
Respostas
Deivison Melo
13/08/2012
O XML que o clientdataset cria é um outro tipo diferente do padrão UTF-8.
GOSTEI 0
Eric Miranda
13/08/2012
Tem alguma forma de eu ler isso no c#
GOSTEI 0
Eric Miranda
13/08/2012
galera de acordo com o arquivo xml que mostrei acima, eu estou quase chegando... mas travo no final..
usei este código abaixo
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
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; } }
GOSTEI 0
Deivison Melo
13/08/2012
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.
GOSTEI 0
Eric Miranda
13/08/2012
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.
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() }; } } }
GOSTEI 0
Guinther Pauli
13/08/2012
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
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
GOSTEI 0
Deivison Melo
13/08/2012
Complementando o que o Guinther mencionou, segue link:
http://edn.embarcadero.com/br/article/37321
http://edn.embarcadero.com/br/article/37321
GOSTEI 0
Deivison Melo
13/08/2012
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).
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).
GOSTEI 0
Eric Miranda
13/08/2012
Valeu Guinther e Deivison pelas dicas..
abs
abs
GOSTEI 0