Я знаю, что есть много бесплатных учебных пособий и сообщений freepascal xml, но ничего, что я нашел до сих пор, похоже, не выполняет эту работу для меня. Я создаю приложение Lazarus для подключения через API к Odoo, получаю некоторые данные, обрабатываю и отвечаю. Структура ответа xml довольно сложна (по крайней мере для меня) для работы. Пример ответ:XML-RPC с 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>
Проблема заключается в том, что значения не имеют уникальных тегов, или идентификаторы. То, что я пытаюсь сделать, - это получить доступ к значениям по их именам. Проблема, с которой я сталкиваюсь, заключается в том, что для значений нет идентификаторов, а некоторые - массивы. Я пытался с
variables:= Doc.DocumentElement.GetElementsByTagName('member');
fname:=variables[3].FindNode('value').TextContent;
, но это не сработает, если изменения структуры и на самом деле не принимать во внимание массивы. Любая помощь будет оценена по достоинству.
Это не файл, а реакция сервера xp-rpc сервера Odoo, поэтому поток. Я собираю его как печатный текст, и пример выше. – Dawid
Я знаю. FWIW, я удалил свой комментарий, прежде чем увидел ваш ответ. –
Возможно, вам стоит начать с [Web Service Toolkit] (http://wiki.freepascal.org/Web_Service_Toolkit). Я не знаком с веб-сервисами, просто думаю. – Abelisto