Создание XML-RPC запроса и переда в качестве аргумента массива
function CreateXMLRPCArray (aMethod : string; aArray : array of string): string;
var
lDoc: IXmlDocument;
anElem, larray: IXmlElement;
i : integer;
begin
if Length (aArray) > 0 then
begin
larray:=lDoc.DocumentElement.AppendElement('params').AppendElement('param').AppendElement('value').AppendElement('array').AppendElement('data');
for I := low(aArray) to High(aArray) do
(larray.AppendElement('value')).AppendText(aArray[i]);
end;
Код Delphi создает запрос XML-RPC с вызовом метода и передачей массива в качестве аргумента.
Вот разбивка кода:
Он начинает создавать экземпляр IXmlDocument, который представляет собой документ XML.
Код затем добавляет элементы к корневому элементу (methodName) для указания имени метода, переданного в параметре.
Если входной массив не пуст, код создает еще один набор вложенных элементов (params, param, value, array, data) внутри корневого элемента для представления значения массива.
Затем он итерирует по элементам в массиве и добавляет каждый элемент как текстовый узел внутри элемента data.
Наконец, код возвращает строковое представление запроса XML.
Вот эквивалентный код в более читаемом формате:
functionCreateXMLRPCArray(aMethod:string;aArray:TArray<string>):string;varlDoc:IXmlDocument;anElem,lArray:IXmlElement;i:Integer;beginlDoc:=CreateXmlDocument('methodCall','1.0','UTF-8');// Имя методаanElem:=lDoc.DocumentElement.AppendElement('methodName');anElem.AppendText(aMethod);ifLength(aArray)>0thenbegin// Массив значенийlArray:=lDoc.DocumentElement.AppendElement('params').AppendElement('param').AppendElement('value').AppendElement('array').AppendElement('data');fori:=Low(aArray)toHigh(aArray)dobegin(lArray.AppendElement('value')).AppendText(aArray[i]);end;end;Result:=lDoc.XML;end;
Альтернативное решение:
functionCreateXMLRPCArray(aMethod:string;aArray:TArray<string>):string;varlDoc:IXmlDocument;beginlDoc:=CreateXmlDocument('methodCall','1.0','UTF-8');// Имя методаlDoc.DocumentElement.AppendElement('methodName').InnerText:=aMethod;ifLength(aArray)>0thenbegin// Массив значенийlDoc.DocumentElement.AppendElement('params').AppendElement('param').AppendElement('value').AppendElement('array').AppendElement('data');fori:=Low(aArray)toHigh(aArray)dobeginlDoc.DocumentElement.AppendElement('params').AppendElement('param').AppendElement('value').AppendText(aArray[i]);end;end;Result:=lDoc.XML;end;
В этом варианте функции код более компактен и использует свойство InnerText для установки текстового значения элемента methodName. Он также eliminiert необходимости в промежуточных переменных (anElem и lArray).
Статья описывает создание XML-RPC-запроса в Delphi, который передаёт в качестве аргумента массив строк.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.