Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Извлечение данных из XML-файла в Delphi: работа с вложенными элементами

Delphi , Интернет и Сети , XML

В статье рассмотрим, как можно извлечь данные из XML-файла, используя примеры на языке Object Pascal с использованием компонентов Delphi для работы с XML. Основное внимание будет уделено чтению вложенных элементов внутри структуры, что особенно актуально, когда структура данных глубоко вложена в XML-документ.

Введение

При работе с XML-документами в Delphi часто возникает необходимость извлечения данных из сложных структур, где элементы могут быть вложены друг в друга. Для решения таких задач можно использовать интерфейсы IXMLDOMDocument и IXMLDOMNode, которые предоставляют мощные средства для парсинга и обработки XML.

Основная часть

Пример XML-файла

Давайте рассмотрим XML-файл, в котором есть вложенные структуры. Структура valres содержит элементы pairingip и pairingdevtype, которые пользователь не может прочитать в своем коде.

<?xml version='1.0'?>
<methodResponse>
    <params>
        <param>
            <value>
                <struct>
                    <member>
                        <name>status</name>
                        <value><int>1</int></value>
                    </member>
                    <member>
                        <name>msg</name>
                        <value><string>Operazione completata correttamente</string></value>
                    </member>
                    <member>
                        <name>valres</name>
                        <value>
                            <struct>
                                <member>
                                    <name>coderr</name>
                                    <value><int>0</int></value>
                                </member>
                                <member>
                                    <name>deserr</name>
                                    <value><string>ricezione di UpdateDevice avvenuta correttamente</string></value>
                                </member>
                                <member>
                                    <name>pairingip</name>
                                    <value><string>192.168.1.15</string></value>
                                </member>
                                <member>
                                    <name>pairingdevtype</name>
                                    <value><int>3</int></value>
                                </member>
                            </struct>
                        </value>
                    </member>
                    <member>
                        <name>svrvers</name>
                        <value><string></string></value>
                    </member>
                </struct>
            </value>
        </param>
    </params>
</methodResponse>

Пример кода для парсинга XML

Пользователь пытался прочитать данные из XML, но не смог получить доступ к вложенным элементам pairingip и pairingdevtype. В его примере кода не хватает глубокого парсинга XML-структуры.

procedure TForm1.ParseResult(ResultString: string);
var
  xml: IXMLDOMDocument;
  node, innerNode: IXMLDOMNode;
begin
  xml := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument;
  xml.async := False;
  xml.loadXML(ResultString);
  if xml.parseError.errorCode <> 0 then
    raise Exception.Create('XML Load error:' + xml.parseError.reason);

  // Получение узла с параметрами
  node := xml.selectSingleNode('//methodResponse/params/param/value/struct');
  if Assigned(node) then
  begin
    // Перебор вложенных элементов
    while node.hasChildNodes do
    begin
      innerNode := node.firstChild;
      while Assigned(innerNode) do
      begin
        if innerNode.nodeName = 'name' and innerNode.text = 'pairingip' then
          Edit1.Text := innerNode.nextSibling.firstChild.text; // Получение IP
        if innerNode.nodeName = 'name' and innerNode.text = 'pairingdevtype' then
          Edit2.Text := innerNode.nextSibling.firstChild.text; // Получение типа устройства
        innerNode := innerNode.nextSibling;
      end;
    end;
  end;
end;

Подтвержденный ответ

В коде выше представлен способ чтения значений pairingip и pairingdevtype, который предполагает, что эти элементы всегда находятся на одном уровне вложенности и имеют четкую структуру. Код использует методы selectSingleNode для поиска узлов с определенными именами и перебирает дочерние узлы для получения значений.

procedure TForm1.Button1Click(Sender: TObject);
var
  XMLDoc: IXMLDOMDocument;
  Node, SibNode: IXMLDOMNode;
begin
  Memo2.Lines.Clear;  // Очистка для тестового вывода

  XMLDoc := CoDOMDocument.Create;
  XMLDoc.LoadXML(Memo1.Lines.Text);  // XML, добавленный в Memo1.Lines

  // Нахождение узла member/name с текстом 'pairingip'
  Node := XMLDoc.selectSingleNode('//member/name[text()="pairingip"]');

  if Assigned(Node) then
  begin
    SibNode := Node.nextSibling.firstChild;  // Переход к узлу 'value/string'
    Memo2.Lines.Add('IP: ' + SibNode.Text);
  end;

  // Нахождение узла member/name с текстом 'pairingdevtype'
  Node := XMLDoc.selectSingleNode('//member/name[text()="pairingdevtype"]');
  if Assigned(Node) then
  begin
    SibNode := Node.nextSibling.firstChild;  // Переход к узлу 'value/int'
    Memo2.Lines.Add('DevType: ' + SibNode.Text);
  end;
end;

Заключение

В данной статье мы рассмотрели, как с помощью компонентов Delphi и интерфейсов IXMLDOMDocument и IXMLDOMNode можно извлекать данные из XML-файлов, даже если они имеют сложную вложенную структуру. Приведенные примеры кода демонстрируют, как работать с элементами внутри структуры, что позволяет эффективно обрабатывать XML-документы в приложениях на Delphi.

Создано по материалам из источника по ссылке.

В статье рассматривается процесс извлечения данных из XML-файла в среде Delphi, с акцентом на работу с вложенными элементами XML-структуры.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: XML ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 16:03:56/0.025290966033936/1