ler xml gerado a partir de um clientDataset em Delphi.
13/08/2012
0
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
Posts
13/08/2012
Deivison Melo
13/08/2012
Eric Miranda
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; } }
13/08/2012
Deivison Melo
14/08/2012
Eric Miranda
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() }; } } }
14/08/2012
Guinther Pauli
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
14/08/2012
Deivison Melo
http://edn.embarcadero.com/br/article/37321
14/08/2012
Deivison Melo
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).
Clique aqui para fazer login e interagir na Comunidade :)