We help IT Professionals succeed at work.
Get Started

Reading complex type element repeats first one found several times

Last Modified: 2016-04-08
Hi Experts.

I'm using Delphi XE6, using WSDL Importer with default options.

This is response I get from server:

    <group id="709">
      <fact term="Amount" value="141578823.7700" typ="Decimal"/>
      <fact term="Currency" value="RSD" typ="String"/>
    <group id="709">
      <fact term="Amount" value="2854.2100" typ="Decimal"/>
      <fact term="Currency" value="USD" typ="String"/>
    <group id="709">
      <fact term="Amount" value="42182.5000" typ="Decimal"/>
      <fact term="Currency" value="EUR" typ="String"/>

Open in new window

(*Shortened for brewity*)

Everything gets read fine, except that for each of groups 709 I get only first group data. So I end up with:


Open in new window

instead of


Open in new window

This is what WSDLImp gave me as a result:
      Fact = class(TRemotable)
        Fterm: string;
        Fterm_Specified: boolean;
        Fvalue: string;
        Fvalue_Specified: boolean;
        Ftyp: string;
        Ftyp_Specified: boolean;
        procedure Setterm(Index: Integer; const Astring: string);
        function  term_Specified(Index: Integer): boolean;
        procedure Setvalue(Index: Integer; const Astring: string);
        function  value_Specified(Index: Integer): boolean;
        procedure Settyp(Index: Integer; const Astring: string);
        function  typ_Specified(Index: Integer): boolean;
        property term:    string  Index (IS_ATTR or IS_OPTN) read Fterm write Setterm stored term_Specified;
        property value:   string  Index (IS_ATTR or IS_OPTN) read Fvalue write Setvalue stored value_Specified;
        property typ:     string  Index (IS_ATTR or IS_OPTN) read Ftyp write Settyp stored typ_Specified;
      Record = array of Fact;
      Group = class(TRemotable)
        Fid: string;
        Fid_Specified: boolean;
        Ffact: Record;
        Ffact_Specified: boolean;
        procedure Setid(Index: Integer; const Astring: string);
        function  id_Specified(Index: Integer): boolean;
        procedure Setfact(Index: Integer; const ARecord: Record);
        function  fact_Specified(Index: Integer): boolean;
        destructor Destroy; override;
        property id:      string  Index (IS_ATTR or IS_OPTN) read Fid write Setid stored id_Specified;
        property fact:    Record  Index (IS_OPTN or IS_UNBD) read Ffact write Setfact stored fact_Specified;
      Array_Of_Group = array of Group;
      Main = class(TRemotable)
        Fgroup: Array_Of_Group;
        Fgroup_Specified: boolean;
        procedure Setgroup(Index: Integer; const AArray_Of_Group: Array_Of_Group);
        function  group_Specified(Index: Integer): boolean;
        destructor Destroy; override;
        property group:  Array_Of_Group  Index (IS_OPTN or IS_UNBD) read Fgroup write Setgroup stored group_Specified;

Open in new window

Iterating through all Groups of Main, and reading all Facts, I get as I've mentioned only first set of facts that I come across repeated as many times as there is group with id=709.
So, my question is. What do I need to do in order to get all distinct groups and their values? What am I missing?
Watch Question
This problem has been solved!
Unlock 2 Answers and 3 Comments.
See Answers
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE