Witam.
Piszę w Delphi7 aplikację, która korzysta z WebService'u opartego o protokół SSL.
Korzystam z wielu metod udostępnianych przez ten WebService, ale mam problem z odczytem jednego z węzłów. Poniżej przedstawię kawałek w kodzie XML.
Wspomnę jeszcze, że posiłkuję się programem soapUi, który pozwala na korzystanie z WebService za pomocą plików XML.
Odpowiedz WebService na wywołanie metody getDossier (w programie soapUi) jest następująca:
<tt_km>
<path id="104373">
<dossier_id>12756</dossier_id>
<trafficperiod_text>codziennie</trafficperiod_text>
<references_arrival>false</references_arrival>
<agencytype_id>KM</agencytype_id>
<path_section id="1019989">
<path_id>104373</path_id>
<from_op_id>110808</from_op_id>
<national_train_nr>43237</national_train_nr>
<national_trasse_nr>071</national_trasse_nr>
<agency_id>161</agency_id>
<departure>18:36</departure>
<vmax>40</vmax>
<trainlength>600</trainlength>
<trainload>2000</trainload>
<engine_uic_nr>ET22</engine_uic_nr>
<brakepercentage>55</brakepercentage>
<midnights_arrival>0</midnights_arrival>
<midnights_departure>0</midnights_departure>
<has_emerg_brake_bypass>false</has_emerg_brake_bypass>
<from_op_name>ZABRZEG CZARNOLESIE PO</from_op_name>
</path_section>
<path_section id="1019990">
<path_id>104373</path_id>
<from_op_id>110799</from_op_id>
<agency_id>161</agency_id>
<arrival>19:04</arrival>
<departure>19:48</departure>
<vmax>80</vmax>
<midnights_arrival>0</midnights_arrival>
<midnights_departure>0</midnights_departure>
<has_emerg_brake_bypass>false</has_emerg_brake_bypass>
<from_op_name>ZEBRZYDOWICE</from_op_name>
</path_section>
<path_section id="1019991">
<path_id>104373</path_id>
<from_op_id>114700</from_op_id>
<agency_id>161</agency_id>
<arrival>20:02</arrival>
<stoptypes>
<stoptype>A</stoptype>
</stoptypes>
<midnights_arrival>0</midnights_arrival>
<midnights_departure>0</midnights_departure>
<has_emerg_brake_bypass>false</has_emerg_brake_bypass>
<from_op_name>PETROVICE U KARVINE</from_op_name>
</path_section>
<path_section id="1019992">
<path_id>104373</path_id>
<from_op_id>114700</from_op_id>
<national_train_nr>43237</national_train_nr>
<agency_id>201</agency_id>
<departure>22:31</departure>
<vmax>80</vmax>
<trainlength>600</trainlength>
<trainload>2000</trainload>
<engine_uic_nr>163</engine_uic_nr>
<brakepercentage>71</brakepercentage>
<midnights_arrival>0</midnights_arrival>
<midnights_departure>0</midnights_departure>
<has_emerg_brake_bypass>false</has_emerg_brake_bypass>
<from_op_name>PETROVICE U KARVINE</from_op_name>
</path_section>
<path_section id="1019993">
<path_id>104373</path_id>
<from_op_id>114667</from_op_id>
<agency_id>201</agency_id>
<arrival>23:01</arrival>
<departure>23:22</departure>
<stoptypes>
<stoptype>L</stoptype>
</stoptypes>
<midnights_arrival>0</midnights_arrival>
<midnights_departure>0</midnights_departure>
<has_emerg_brake_bypass>false</has_emerg_brake_bypass>
<from_op_name>OSTRAVA HLAVNI NADRAZI</from_op_name>
</path_section>
<path_section id="1019994">
<path_id>104373</path_id>
<from_op_id>114732</from_op_id>
<agency_id>201</agency_id>
<arrival>01:35</arrival>
<midnights_arrival>0</midnights_arrival>
<midnights_departure>0</midnights_departure>
<has_emerg_brake_bypass>false</has_emerg_brake_bypass>
<from_op_name>PREROV</from_op_name>
</path_section>
</path>
</tt_km>
Problem dotyczy sekcji <path_section>. Jest ich 6, natomiast WebService nie udostępnia metody, która zwraca wartość wielkości sekcji, dla przykładu kod w Delphi:
Wywołanie metody wygląda następująco:
GetDossierResponse.pathfinderintegration.dossier.tt_km.TrasseArray[0]
i mogę przy pomocy tej tej metody odczytać dossier_id, trafficperiod_text, references_arrival lub agencytype_i, poprzez:
GetDossierResponse.pathfinderintegration.dossier.tt_km.TrasseArray[0].dossier_id
GetDossierResponse.pathfinderintegration.dossier.tt_km.TrasseArray[0].trafficperiod_text, ... itd.
Nie wiem natomiast jak się dobrać do sekcji path_section. Jest ich sześć. Nie ma natomiast dostępnej metody, takie jak, np:
GetDossierResponse.pathfinderintegration.dossier.tt_km.TrasseArray[0].path_section.Len
Możliwe, że rozwiązaniem tego problemu jest przekazanie całości tablicy TrasseArray[0], czyli 6-ciu path_section do jednej tablicy dynamicznej nie mogę jednak sobie z tym poradzić.
Może też przekazanie odpowiedzi WebService do pliku XML, ale niestety nie wiem w jaki sposób połączyć HTTPRIO z, np XMLDocument?
W dotNecie jest pętla foreach, która przekazuje obiekt do tablicy dynamicznej utworzonej przez programistę, ta natomiast zwraca wielkość tej tablicy.
Mam jeszcze inne pytanie, a o tym później.
Bardzo proszę o pomoc i pozdrawiam.