Ich weiß, es gibt viele Freepascal Xml-Tutorials und Posts, aber nichts, was ich bis jetzt gefunden habe scheinen die Arbeit für mich zu tun. Ich baue Lazarus Desktop-App, um über die API mit Odoo zu verbinden, einige Daten zu erhalten, zu verarbeiten und zu antworten. Die Struktur der XML-Antwort ist ziemlich schwierig (zumindest für mich) zu arbeiten. Das Beispiel Antwort ist:XML-RPC mit Lazarus freepascal
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>create_date</name>
<value>
<string>2016-03-30 09:05:23</string>
</value>
</member>
<member>
<name>file_name</name>
<value>
<string>O156AP000100</string>
</value>
</member>
<member>
<name>dispatch_date</name>
<value>
<string>2016-04-04</string>
</value>
</member>
<member>
<name>height</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>custom_option_mapping_ids</name>
<value>
<array>
<data />
</array>
</value>
</member>
<member>
<name>message_ids</name>
<value>
<array>
<data />
</array>
</value>
</member>
<member>
<name>message_summary</name>
<value>
<string />
</value>
</member>
<member>
<name>create_uid</name>
<value>
<array>
<data>
<value>
<int>7</int>
</value>
<value>
<string>My 1st years</string>
</value>
</data>
</array>
</value>
</member>
<member>
<name>display_name</name>
<value>
<string>artwork.job,283</string>
</value>
</member>
<member>
<name>message_is_follower</name>
<value>
<boolean>1</boolean>
</value>
</member>
<member>
<name>production_date</name>
<value>
<boolean>0</boolean>
</value>
</member>
<member>
<name>message_last_post</name>
<value>
<boolean>0</boolean>
</value>
</member>
<member>
<name>id</name>
<value>
<int>283</int>
</value>
</member>
<member>
<name>width</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>file_path</name>
<value>
<string>2016-04-04/Table Rate/1</string>
</value>
</member>
<member>
<name>text_colour</name>
<value>
<array>
<data>
<value>
<int>489</int>
</value>
<value>
<string>Text Colour: Fuchsia Pink</string>
</value>
</data>
</array>
</value>
</member>
<member>
<name>text_lines</name>
<value>
<array>
<data>
<value>
<int>1686</int>
</value>
<value>
<int>16380</int>
</value>
</data>
</array>
</value>
</member>
<member>
<name>sale_order_id</name>
<value>
<array>
<data>
<value>
<int>368</int>
</value>
<value>
<string>SO156</string>
</value>
</data>
</array>
</value>
</member>
<member>
<name>text_font</name>
<value>
<array>
<data>
<value>
<int>492</int>
</value>
<value>
<string>Font: Verdana</string>
</value>
</data>
</array>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>
Das Problem ist, dass die Werte ohne eindeutige Tags sind oder IDs. Was ich versuche, ist der Zugriff auf Werte mit ihren Namen. Das Problem, dem ich gegenüberstehe, ist, dass es keine IDs für die Werte usw. gibt und einige Teile Arrays sind. Ich habe versucht, mit
variables:= Doc.DocumentElement.GetElementsByTagName('member');
fname:=variables[3].FindNode('value').TextContent;
aber das wird, wenn Strukturänderungen scheitern und nicht wirklich Arrays berücksichtigt. Jede Hilfe wird geschätzt.
Es ist keine Datei, aber Odoo Server xml-rpc Antwort so Stream. Ich nehme es als druckbaren Text auf und das Beispiel ist oben. – Dawid
Ich weiß. FWIW, ich habe meinen Kommentar gelöscht, bevor ich deine Antwort gesehen habe. –
Wahrscheinlich sollten Sie bei [Web Service Toolkit] starten (http://wiki.freepascal.org/Web_Service_Toolkit) Ich bin nicht vertraut mit Web-Services, nur eine Vermutung. – Abelisto