⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 productbinding.pas

📁 delphi实现 webservice的例子.有服务端和客户段 利用xml交互.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
 var
  Node1,Node2:IXMLNode;
  Node3:TXmlProductType;
 begin
   Node1 :=ReadXmlBody(XmlData);
   Node3:=TXmlProductType.Create;
   try
    Node2 := Node1.ChildNodes.FindNode(ROW);
    Node3.id := StrToIntdef(Node2.ChildNodes[Uppercase('id')].Text,0);
    Node3.pid :=Node2.ChildNodes[Uppercase('pid')].Text;
    Node3.name :=Node2.ChildNodes[Uppercase('name')].Text;
    Node3.model :=Node2.ChildNodes[Uppercase('model')].Text;
    Node3.sunit :=Node2.ChildNodes[Uppercase('sunit')].Text;
    Node3.thecurrency :=Node2.ChildNodes[Uppercase('thecurrency')].Text;
    Node3.category :=Node2.ChildNodes[Uppercase('category')].Text;
    Node3.pictures :=Node2.ChildNodes[Uppercase('pictures')].Text;
    Node3.onsaledate :=(Node2.ChildNodes[Uppercase('onsaledate')].Text);
    Node3.withdrawdate :=Node2.ChildNodes[Uppercase('withdrawdate')].Text;
    Node3.weight :=strtointdef(Node2.ChildNodes[Uppercase('weight')].Text,0);
    Node3.originalcode :=Node2.ChildNodes[Uppercase('originalcode')].Text;
    Node3.summary :=Node2.ChildNodes[Uppercase('summary')].Text;
    Node3.locus :=Node2.ChildNodes[Uppercase('locus')].Text;
    Node3.color :=Node2.ChildNodes[Uppercase('color')].Text;
    Node3.grade :=Node2.ChildNodes[Uppercase('grade')].Text;
    Node3.UserCode :=Node2.ChildNodes[Uppercase('USERCODE')].Text;
    Result :=Node3;
    Node2.OwnerDocument.Active :=False;
   except on E:Exception do
     raise Exception.Create(E.Message+ErrorByXml01);
   end;
   end;

{ProductGetRequest}
 function GetPidFromRequest(Xmldata:WideString):string;
 var
    Node2,Node3:IXMLNode;
 begin
   Node2:=ReadXmlBody(Xmldata);
   try
    Node3 := Node2.ChildNodes.FindNode(ProductID);
    Result :=Node3.Text;
   except on E:Exception do
     raise Exception.Create(E.Message+ErrorByXml01);
   end;
 end;

 function GetXmlDocFromString(Xmldata:WideString):IXMLDocument;
 var
   xmldoc :IXMLDocument;
   StrStr: TStringStream;
   stream :TMemoryStream;
   begin
     xmldoc :=NewXMLDocument();
     stream:=TMemoryStream.Create;
     xmldata :=StringReplace(xmldata,'<?xml version="1.0"?>','<?xml version="1.0" encoding="GB2312"?>',[rfReplaceAll]);
     StrStr := TStringStream.Create(Xmldata);
    // StrStr := TStringStream.Create(AnsiToUtf8(Xmldata));
    try
      Stream.CopyFrom(StrStr, 0);
      xmldoc.Encoding :='GB2312';
      xmldoc.LoadFromStream(Stream);
      Result :=xmldoc;
    finally
      StrStr.Free;
      stream.Free;
    end;
 end;



function CreatePictureXml(imageinfo:TImageInfo;Rcode,Rdesc:string):WideString;
var
  Node2 : IXMLNode;
  Node3 : IXMLNode;
  XMLWString:WideString;
begin
    Node2:=WriteXmlBody(PostProductImageRequestNode,False);
    if(Rcode<>'') then
    begin
     Node2.AddChild(ResultCode).Text :=rcode;
     Node2.AddChild(ResultDesc).Text :=Rdesc;
    end;
    Node3:=Node2.AddChild(ProductID);
    Node3.Text :=imageinfo.Pid;
    Node3:=Node2.AddChild(ImageCodeNode);
    Node3.Text :=imageinfo.LabelCode;
    Node3 :=Node2.AddChild('Image');
    Node3.Text :=imageinfo.ImageStr;
    Node2.OwnerDocument.SaveToXML(XMLWString);
    Result :=XMLWString;
end;

function GetPictureFromXml(XmlData:WideString;validuser:Boolean=True):TImageInfo;
var
  image :TImageInfo;
  Node2 : IXMLNode;
  Node3 : IXMLNode;
  pid,labelcode,base64str :string;
begin
   Node2:=ReadXmlBody(XmlData,validuser);
   try
    Node3 := Node2.ChildNodes.FindNode(ProductID);
    pid :=node3.Text;
    Node3 := Node2.ChildNodes.FindNode(ImageCodeNode);
    labelcode:=node3.Text;
    image := TImageInfo.Create('',pid,labelcode);
    Node3 := Node2.ChildNodes.FindNode('Image');
    if(Node3<>nil) then
    begin
     base64str:=node3.Text;
     image.ImageStr  :=base64str;
    end;
    Result :=image;
    Node2.OwnerDocument.Active :=false;
   except on E:Exception do
     raise Exception.Create(E.Message+ErrorByXml01);
   end;
  end;

 Function CreateGetImageXml(pid,imagecode:string):WideString;
  var
    Node1 : IXMLNode;
    XMLWString:WideString;
  begin
     node1 :=WriteXmlBody(GetProductImageRequestNode);
     Node1.AddChild(ProductID).Text :=pid;
     Node1.AddChild(imagecodeNode).Text :=imagecode;
     Node1.OwnerDocument.SaveToXML(XMLWString);
     Node1.OwnerDocument.Active :=false;
     Result :=XMLWString;
  end;


  //创建测试xml
Function CreateLoginXML(userid,password:string):widestring;
var
  bodynode:IXMLNode;
begin
   bodynode :=WriteXmlBody(LoginRequestNode,false);
   bodynode.AddChild('UserID').Text :=userid;
   bodynode.AddChild('Password').Text :=password;
   Result :=bodynode.OwnerDocument.XML.Text;
   bodynode.OwnerDocument.Active :=false;
 end;

 function GetResultMsg(xmldata:WideString):TReturnMsg;
   var
    bodynode:IXMLNode;
  begin
   bodynode := ReadXmlBody(xmldata,False);
   Result.ResultCode :=bodynode.ChildNodes[ResultCode].Text;
   Result.ResultDesc :=bodynode.ChildNodes[ResultDesc].Text;
   if(bodynode.ChildNodes[ServiceIDNode]<>nil) then
    Result.ServiceID :=bodynode.ChildNodes[ServiceIDNode].Text;
   if(bodynode.ChildNodes['Image']<>nil) then
    Result.ImageStr :=bodynode.ChildNodes['Image'].Text;
  end;

  function CreateXmlFromProduct(product:TXmlProductType):Widestring;
  var
    bodynode:IXMLNode;
  begin
     bodynode :=WriteXmlBody(ProductUpdateRequestNode,True);
     bodynode :=bodynode.AddChild(ROW);
     bodynode.AddChild(Uppercase('pid')).Text :=product.pid;
     bodynode.AddChild(Uppercase('name')).Text :=product.name;
     bodynode.AddChild(Uppercase('model')).Text :=product.model;
     bodynode.AddChild(Uppercase('unit')).Text :=product.sunit;
     bodynode.AddChild(Uppercase('thecurrency')).Text :=product.thecurrency;
     bodynode.AddChild(Uppercase('category')).Text :=product.category;
     bodynode.AddChild(Uppercase('pictures')).Text :=product.pictures;
     bodynode.AddChild(Uppercase('onsaledate')).Text :=product.onsaledate;
     bodynode.AddChild(Uppercase('withdrawdate')).Text :=product.withdrawdate;
     bodynode.AddChild(Uppercase('weight')).Text :=IntToStr(product.weight);
     bodynode.AddChild(Uppercase('originalcode')).Text :=product.originalcode;
     bodynode.AddChild(Uppercase('summary')).Text :=product.summary;
     bodynode.AddChild(Uppercase('locus')).Text :=product.locus;
     bodynode.AddChild(Uppercase('psize')).Text :=product.psize;
     bodynode.AddChild(Uppercase('color')).Text :=product.color;
     bodynode.AddChild(Uppercase('grade')).Text :=product.grade;
     bodynode.AddChild(Uppercase('usercode')).Text :=product.UserCode;
     Result :=bodynode.OwnerDocument.XML.Text;
     bodynode.OwnerDocument.Active :=false;
    end;

    Function CreateGetImageResponse(dataXml:WideString):TReturnMsg;
    begin
     ;
    end;

    Function CreateDateXml(datetype:TdateType):WideString;
    var
     bodynode:IXmlNode;
    begin
     bodynode.AddChild('DataType').Text :=datetype.DateType;
     bodynode.AddChild('Days').Text :=inttostr(datetype.Days);
     result :=bodynode.OwnerDocument.XML.Text;
     bodynode.OwnerDocument.Active :=false;
    end;

    Function ReadProdcutList(DataXml:WideString):TReturnListMsg;
    var
     bodynode:IxmlNode;
     node1:IXMLNode;
    begin
     bodynode :=ReadXmlBody(dataXml,false);
     Result.ResultCode :=bodynode.ChildNodes[ResultCode].Text;
     Result.ResultDesc :=bodynode.ChildNodes[ResultDesc].Text;
     result.ProductList :=Tstringlist.Create;
     node1 :=bodynode.ChildNodes[ROW];
     while node1<>nil do
     begin
      result.ProductList.Add(node1.ChildNodes['PID'].Text+'-'+node1.ChildNodes['NAME'].Text);
      node1 :=bodynode.NextSibling;
     end;
    end;

   Function CreatePidXml(pid:String):WideString;
   var
    bodynode:IxmlNode;
   begin
    bodynode :=WriteXmlBody(ProductGetRequestNode);
    bodynode.AddChild(ProductID).Text :=pid;
    result :=bodynode.OwnerDocument.XML.Text;
    bodynode.OwnerDocument.Active :=false;
   end;
   Function GetProductinfo(dataXml:WideString):TReturnPtypeListMsg;
    var
     bodynode:IxmlNode;
     node2:IXMLNode;
     product :TXmlProductType;
    begin
     bodynode :=ReadXmlBody(dataXml,false);
     Result.ResultCode :=bodynode.ChildNodes[ResultCode].Text;
     Result.ResultDesc :=bodynode.ChildNodes[ResultDesc].Text;
     result.ProductList :=Tlist.Create;
     node2 :=bodynode.ChildNodes[ROW];
     while node2<>nil do
     begin
       product :=TxmlProductType.Create;
       product.id := StrToIntdef(Node2.ChildNodes[Uppercase('id')].Text,0);
       product.pid :=Node2.ChildNodes[Uppercase('pid')].Text;
       product.name :=Node2.ChildNodes[Uppercase('name')].Text;
       product.model :=Node2.ChildNodes[Uppercase('model')].Text;
       product.sunit :=Node2.ChildNodes[Uppercase('sunit')].Text;
       product.thecurrency :=Node2.ChildNodes[Uppercase('thecurrency')].Text;
       product.category :=Node2.ChildNodes[Uppercase('category')].Text;
       product.pictures :=Node2.ChildNodes[Uppercase('pictures')].Text;
       product.onsaledate :=(Node2.ChildNodes[Uppercase('onsaledate')].Text);
       product.withdrawdate :=Node2.ChildNodes[Uppercase('withdrawdate')].Text;
       product.weight :=strtointdef(Node2.ChildNodes[Uppercase('weight')].Text,0);
       product.originalcode :=Node2.ChildNodes[Uppercase('originalcode')].Text;
       product.summary :=Node2.ChildNodes[Uppercase('summary')].Text;
       product.locus :=Node2.ChildNodes[Uppercase('locus')].Text;
       product.color :=Node2.ChildNodes[Uppercase('color')].Text;
       product.grade :=Node2.ChildNodes[Uppercase('grade')].Text;
       product.UserCode :=Node2.ChildNodes[Uppercase('USERCODE')].Text;
       result.ProductList.Add(product);
       node2 :=bodynode.NextSibling;
     end;
    end;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -