delphi - Reading distinct values from XML using XPath -


i have xml in following format:

<accounts>    <account number="1"   debitamount="1000" amount="2827561.95" />     <account number="225" debitamount="2000"  amount="12312.00" />     <account number="236" debitamount="london"    amount="457656.00" />     <account number="225" debitamount="london"    amount="23462.40" />     <account number="236" debitamount="bangalore" amount="2345345.00" />  </accounts> 

how retreive unique account numbers using xpath? ie, want values 1, 225 , 236.

this did:(i'm using delphi 2007...)

const xmlstr = ' <accounts>    <account number="1"   debitamount="1000" amount="2827561.95" />     <account number="225" debitamount="2000"  amount="12312.00" />     <account number="236" debitamount="london"    amount="457656.00" />     <account number="225" debitamount="london"    amount="23462.40" />     <account number="236" debitamount="bangalore" amount="2345345.00" />  </accounts>';   function getaccountnumbers:tlist;  var    xmldomdocument  : ixmldomdocument;    accounts : ixmldomnodelist;   accountdetail :ixmldomnode;    i:integer    list :tlist  begin    result:=tlist.create;    xmldomdocument:=codomdocument.create;    xmldomdocument.loadxml(xmlstr);    accounts:= xmldomdocument.selectnodes(''./accounts    /account[not(@number=preceding-sibling/ account /@number)]');   := 0 accountdetails.length - 1 begin      accountdetail := accountdetails.item[i];      //omitting "<>nil" checks...      list.add(accountdetail.attributes.getnameditem('number').nodevalue;   end;  end; 

but returns no nodes(accountdetails.length=0). please let me know missing here.

thanks,

pradeep

it seems version of msxml delphi 2007 doesn't support xpath axis. if decide use following code, import either microsoft xml, v3.0 or microsoft xml, v6.0 type library first , try this:

unit unit1;  interface  uses   windows, messages, sysutils, variants, classes, graphics, controls, forms,   dialogs, stdctrls, msxml2_tlb;  type   tform1 = class(tform)     button1: tbutton;     procedure button1click(sender: tobject);   private     { private declarations }   public     { public declarations }   end;  var   form1: tform1;  implementation  {$r *.dfm}  const   xmlstring =     '<accounts>' +     '<account number="1" debitamount="1000" amount="2827561.95"/>' +     '<account number="225" debitamount="2000"  amount="12312.00"/>' +     '<account number="236" debitamount="london" amount="457656.00"/>' +     '<account number="225" debitamount="london" amount="23462.40"/>' +     '<account number="236" debitamount="bangalore" amount="2345345.00"/>' +     '</accounts>';  type   tintegerarray = array of integer;  function getaccountnumbers(const axmlstring: string): tintegerarray; var   i: integer;   xmldomnodelist: ixmldomnodelist;   xmldomdocument: ixmldomdocument3; begin   xmldomdocument := codomdocument60.create;   if assigned(xmldomdocument) , xmldomdocument.loadxml(axmlstring)   begin     xmldomnodelist := xmldomdocument.selectnodes('/accounts/account[not(@number=preceding-sibling::account/@number)]/@number');     setlength(result, xmldomnodelist.length);     := 0 xmldomnodelist.length - 1       result[i] := xmldomnodelist.item[i].nodevalue;   end; end;  procedure tform1.button1click(sender: tobject); var   s: string;   i: integer;   integerarray: tintegerarray; begin   s := 'account numbers: ';   integerarray := getaccountnumbers(xmlstring);   := 0 length(integerarray) - 1     s := s + inttostr(integerarray[i]) + ', ';   delete(s, length(s) - 1, 2);   showmessage(s); end;  end. 

Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -