Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 13:43   #1
nieves
 
Регистрация: 30.11.2011
Сообщений: 3
По умолчанию Снова Delphi и XML

Всем здравствуйте! Возникла такая проблема: загружаем xml документ в treeview, необходимо, чтобы при выборе ноды в treeview формировался string list со значениями, а конкретно - при выборе ноды port в stringlist1 выводилось значение ноды ip, принадлежащей общей (для ip и port) ноде host, а в stringlist2 выводились значения ноды snmp_oid всех нод item, принадлежащих данному items. Для чего это нужно: при выборе порта устройства выбираются нужные oid, которые будут отправлены этому устройству, и выбирается ip устройства. Собственно вся трудность в том, что устройств в xml файле будет много и нужно, чтобы выбирался ip именно того, чей порт выбран.
Пока сделано только это:
Код:
unit Main;

interface 

uses 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
Dialogs, StdCtrls, Buttons,ComCtrls, acShellCtrls,
  Menus, msxml;

type 
TMainForm = class(TForm)
    TreeView1: TTreeView;
    Memo2: TMemo;
    Memo1: TMemo;

    procedure FormCreate(Sender: TObject);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);


private
{ Private declarations }

public
{ Public declarations }
end;
var
MainForm: TMainForm;
SL : TStringList;
SL2 : TStringList;
XML1:IXMLDOMDocument;

implementation

//uses Main;

{$R *.dfm}


procedure TMainForm.FormCreate(Sender: TObject);
var

  mainNode: variant;
  TreeNode: TTreeNode;

procedure LoadItems(TreeNode: TTreeNode; Node: variant);
  var
    i: integer;
  begin
    TreeNode := TreeView1.Items.AddChild(TreeNode, Node.nodeName);
    TreeNode.ImageIndex := TreeNode.Level;
    TreeNode.SelectedIndex := TreeNode.ImageIndex;
    if Node.nodeName = '#text' then
    begin
      TreeNode.Text := Node.nodeValue;
    end;
    for i:=0 to Node.childNodes.length-1 do
      LoadItems(TreeNode, Node.childNodes.item[i]);
  end;
begin
  XML1 := CoDomDocument.Create;
  XML1.Async := false;
  XML1.load('Config.xml');
  //Отсутствует файл Config.xml
  if XML1.parseError.errorCode = -2146697210 then
  begin
    ShowMessage('Отсутствует файл конфигурации!!!');
  end
  else
  //Ошибка в файле Config.xml
  if XML1.parseError.errorCode <> 0 then
  begin
    ShowMessage('При загрузке файла конфигурации произошла ошибка!'+#13#10+

                'Код ошибки: '+IntToStr(XML1.parseError.errorCode)+#13#10+

                'Текст ошибки: '+XML1.parseError.reason+#13#10+

                'Строка с ошибкой: '+IntToStr(XML1.parseError.line)+#13#10+

                'Символ в строке с ошибкой: '+IntToStr(XML1.parseError.linepos));

  end
  else
  begin
    mainNode := XML1.documentElement;

    { Загрузка DOM в TreeView }
    LoadItems(nil, mainNode);
    // дерево DOM построено в TreeView


    TreeNode := TreeView1.Items[1];
    while Assigned(TreeNode) do
    begin
      TreeNode.Expand(false);
      TreeNode := TreeNode.GetNextSibling;
    end;
    if Assigned(TreeView1.Items[0]) then
      TreeView1.Items[0].Expand(false);

  end;
end;

procedure TMainForm.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
  _node: IXMLDOMNode;
  s:Integer;
begin
    Memo1.Clear;
    _node:= XML1.selectSingleNode('//port');
    for s:=0 to _node.selectNodes('//item').length-1 do
        begin
          SL := TStringList.Create;
          SL.Add((_node.selectnodes('//item').item[s].selectSingleNode('description').Text) +'='+
(_node.selectnodes('//item').item[s].selectSingleNode('snmp_oid').Text)); //(TXMLItem(Node.Data).Params.Text);
          Memo1.Lines.Add(SL.Text);
    end
end;

end.
Есть идеи? Исходники во вложении. Там скорее всего все просто, только я чего-то не пойму...

Для начала нужно прочитать и понять правила раздела...
В частности :
4. Не использовать прикрепленные файлы для исходного текста программы.

Последний раз редактировалось mihali4; 01.12.2011 в 03:52.
nieves вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7 и снова о UTF-8 celovec Общие вопросы Delphi 4 30.08.2011 15:05
И снова сертификаты, или ssl+delphi+https Lothar Работа с сетью в Delphi 4 04.05.2011 08:23
И снова левая и правая кнопка мыши (Delphi 7) alxd Помощь студентам 6 25.09.2009 14:10
XML (Delphi) VadEr Помощь студентам 11 23.06.2009 23:32
xml в delphi /Arven/ Компоненты Delphi 0 23.04.2008 22:47