Показать сообщение отдельно
  #10  
Старый 04.09.2011, 00:06
manco manco вне форума
Прохожий
 
Регистрация: 01.09.2011
Сообщения: 4
Репутация: 10
Хорошо

Цитата:
Сообщение от NumLock
вот один из вариантов:
Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    DBGrid1: TDBGrid;
    OpenDialog1: TOpenDialog;
    XMLDocument1: TXMLDocument;

var
  l: Integer;
  i: Integer;
  ADOMNodeList: IDOMNodeList;
  ADOMNode: IDOMNode;
  j: Integer;
begin
  if OpenDialog1.Execute then
  begin
    XMLDocument1.LoadFromFile(OpenDialog1.FileName);
    ADOMNodeList:=XMLDocument1.DOMDocument.getElementsByTagName('ROW');
    l:=ADOMNodeList.length;
    for i:=0 to l-1 do
    begin
      ADOMNode:=ADOMNodeList.item[i];
      if i=0 then
      begin
        ClientDataSet1.FieldDefs.Clear;
        for j:=0 to ADOMNode.childNodes.length-1 do
        begin
          ClientDataSet1.FieldDefs.Add(ADOMNode.childNodes.item[j].nodeName, ftString, 10);
        end;
        ClientDataSet1.CreateDataSet;
      end;
      ClientDataSet1.Append;
      for j:=0 to ADOMNode.childNodes.length-1 do
      begin
        if ADOMNode.childNodes.item[j].childNodes.length>0 then
          ClientDataSet1.FieldByName(ADOMNode.childNodes.item[j].nodeName).AsString:=
            ADOMNode.childNodes.item[j].childNodes.item[0].nodeValue
        else if ADOMNode.childNodes.item[j].attributes.length>0 then
          ClientDataSet1.FieldByName(ADOMNode.childNodes.item[j].nodeName).AsString:=
            ADOMNode.childNodes.item[j].attributes.item[0].nodeValue;
      end;
      ClientDataSet1.Post;
    end;
  end;


Да! Это то что нужно!!
Примерно понял как нужно делать, теперь буду подстраивать под свою утилиту.

Спасибо, огромное NumLock за помощь!!!


P.S.
Хотел еще вот что спросить: читал в сети, что с XML-файлами можно работать как с готовой таблицей БД. Так ли это?
В чем отличия от работы с СУБД Access или другими? Есть ли преимущества? Слишком это сложно?

Вопросы чисто для спортивного интереса, свою программку буду делать на том, что знаю...
Спасибо!
Ответить с цитированием