注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

海宏软件的个人主页

用机器解放人的双手

 
 
 

日志

 
 

delphi的xml和数据集dataset互相转化  

2013-11-07 23:12:59|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一:delphi的标准格式的:
  数据集=》xml
    clientDataSet1.Open;
    txt_xml.text:=clientDataSet1.XMLData;
 xml=》数据集:
   clientDataset2.XMLData:=txt_xml.text;
    clientDataset2.Open;

二:非delphi的标准格式,需要先用xml mapper生成一个格式文件,否则会出错transFormationFile must be ,,,
  
在微软中国找到了一个官方的说法------不建议将DataSet直接作为返回值传送,因为里面含有大量复杂的schema以及更改等信息,大部分非.NET语言在解析上有困难。建议使用DataSet.WriteXML方法将简化后的XML版本作为一个WideString回传。经过试验,已经在Delphi下轻松通过,Delphi中还需要使用XML Mapper工具事先生成Transfomation(XTR)文件。 
Delphi7客户端代码 
-------------------------------------------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject); 
var 
  A:Service1Soap; 
  B:WideString; 
  XMLDoc: IXMLDocument; 
begin 
  A := HTTPRIO1 as Service1Soap; 
  B := A.GetPersonTable; 
  Memo1.Lines.Add( B ); 
  ClientDataset1.Active := FALSE; 
  XMLDoc := NewXMLDocument; 
  XMLDoc.Encoding := SUTF8; 
  XMLDoc.XML.Text:=s; //没有这个方法:XMLDoc.LoadFromXML(B); 

  XMLTransformProvider1.TransformRead.SourceXmlDocument := XMLDoc.GetDOMDocument; 
  ClientDataset1.Active := TRUE; 
  //实际上,根本不用这么麻烦。一句就够了:XMLTransformProvider1.TransformRead.SourceXml:=B;
end; 

end. 

--------------------------------------------------------------------------------------- 
.NET WebService代码 
--------------------------------------------------------------------------------------- 
  [Serializable] 
   public class Person 
  { 
   public Person() 
   { 
   } 

   public Person(string name,string gender) 
   { 
    this.Name=name; 
    this.Gender=gender; 
   } 

   public string Name=""; 
   public string Gender=""; 
  } 
  [WebMethod(CacheDuration=60)] 
  public Person[] GetPersons() 
  { 
   Person Alice=new Person("Alice","Female"); 
   Person Bob=new Person("Bob","Male"); 
   Person Chris=new Person("Chris","Female"); 
   Person Dennis=new Person("Dennis","Male"); 

   return new Person[]{Alice,Bob,Chris,Dennis}; 
  } 

  [WebMethod] 
  public string GetPersonTable() 
  { 
   DataTable table=new DataTable("Person");   
   table.Columns.Add("Name"); 
   table.Columns.Add("Gender"); 
   table.Rows.Add(new string[2]{"Alice","Female"}); 
   table.Rows.Add(new string[2]{"Bob","Male"}); 
   table.Rows.Add(new string[2]{"Chris","Female"}); 
   table.Rows.Add(new string[2]{"Dennis","Male"}); 
   table.Rows.Add(new string[2]{"Eric","Male"}); 
  
   DataSet dataset=new DataSet("PersonTable"); 
   dataset.Tables.Add(table); 
  
   System.Text.StringBuilder strbuilder=new System.Text.StringBuilder(); 
   StringWriter writer=new StringWriter(strbuilder); 
   dataset.WriteXml(writer,System.Data.XmlWriteMode.IgnoreSchema); 
   return strbuilder.ToString(); 
  } 

  评论这张
 
阅读(1420)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017