Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.14;
Скачать: CL | DM;

Вниз

список IXMLNode   Найти похожие ветки 

 
zlodey   (2010-08-18 21:21) [0]

имеется список имен xml-файлов одинаковой структуры. Нужно на начальном этапе сформировать список записей типа IXMLNode взяв из каждого из xml-фалов списка по определенному ноду (IXMLNode). Сделал небольшие наброски, но чет не работает, валяться AccessViolation"ы. Помогите разобраться.


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, XMLIntf, XMLDoc;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 PIXMLNode = ^IXMLNode;

 TIntfs = class(TList)
 private
   function Get(Idx: Integer): PIXMLNode;
 protected
   procedure Notify(Ptr: Pointer; Act: TListNotification); override;
 public
   function Add(xml_node: PIXMLNode): Integer;
 {  }
   property Intfs[Idx: Integer]: PIXMLNode read Get; default;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TIntfs }

function TIntfs.Add(xml_node: PIXMLNode): Integer;
begin
 Result := inherited Add(xml_node);
end;

function TIntfs.Get(Idx: Integer): PIXMLNode;
begin
 Result := PIXMLNode(inherited Get(Idx));
end;

procedure TIntfs.Notify(Ptr: Pointer; Act: TListNotification);
begin
 {if Act = lnDeleted then
   Dispose(PIXMLNode(Ptr));}
 inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Intfs: TIntfs;
 xml_intf: IXMLDocument;
 node: IXMLNode;
begin
 xml_intf := TXMLDocument.Create(nil);
 xml_intf.LoadFromFile("C:\Documents and Settings\Admin\Рабочий стол\Test.xml");
 node := xml_intf.DocumentElement;
 ShowMessage(node.NodeName);
 Intfs := TIntfs.Create;
 Intfs.Add(PIXMLNode(node));
 ShowMessage(Intfs[0]^.NodeName);
 Intfs.Free;
end;


 
Игорь Шевченко ©   (2010-08-18 21:37) [1]


> но чет не работает, валяться AccessViolation"ы


Отладчик - рулез фарева


 
zlodey   (2010-08-18 21:54) [2]

во блин, не от того наследовался, надо от TInterfaceList. Все разобрался, тему можно закрывать.


 
Юрий Зотов ©   (2010-08-19 13:05) [3]


> zlodey   (18.08.10 21:54) [2]

Смешение объектной и интерфейсной моделей есть величайший программерский грех. Избегайте его. Либо одно, либо другое - иначе запросто можно нахватать трудноуловимых глюков.

В чем Вы на собственном опыте и убеждаетесь. И если я не ошибаюсь, то уже во второй раз.

:o)


 
Slym ©   (2010-08-20 08:54) [4]

начальный - конечный этап... ты обрисуй что нужно в итоге, а то может проще можно


 
Slym ©   (2010-08-20 09:08) [5]

Slym ©   (20.08.10 8:54) [4]
например
1. вместо TIntfs использовать новый XMLDocument (CreateOleObject("Msxml2.DOMDocument"), а не TXMLDocument)
2. нужные ноды cloneNode и запихать в XMLDocument
3. а прочую работу уже делать со своим XMLDocument

FinalDoc:=CreateOleObject("Msxml2.DOMDocument");
while true do
begin
Doc:=CreateOleObject("Msxml2.DOMDocument");
Doc.load(FileName);
node1:=Doc.selectSingleNode("root\node");
FinalDoc.documentElement.appendChild(node1.cloneNode(true));
end;
Work(FinalDoc);


 
sniknik ©   (2010-08-20 09:46) [6]

> использовать новый XMLDocument (CreateOleObject("Msxml2.DOMDocument"), а не TXMLDocument)
чем это TXMLDocument не угодил? так как он там в коде ([0]) создается с nil в параметре, возвратом будет интерфейс, что один в один совпадает с предлагаемым.
т.е. хрен на хрен менять только время терять.


 
Slym ©   (2010-08-20 13:51) [7]

sniknik ©   (20.08.10 9:46) [6]
чем это TXMLDocument не угодил

а XPath там есть?


 
Медвежонок Пятачок ©   (2010-08-20 14:14) [8]

TXMLDocument супротив IXMLDOMDocument - это все равно что плотник супротив  столяра.
или TTable против TQuery.


 
Юрий Зотов ©   (2010-08-20 15:43) [9]


> Медвежонок Пятачок ©   (20.08.10 14:14) [8]

Если нужно всего лишь обтесать бревно, то плотник выгоднее.


 
Медвежонок Пятачок ©   (2010-08-20 16:48) [10]

взяв из каждого из xml-фалов списка по определенному ноду (IXMLNode).

если "определнный" нод определяется позицией, то да, тесать бревно легко и быстро.

а ежели там определенные ноды - это условие по значениям в атрибутах и прочая мало-мальски непростая логика?

тесать и тесать придется.



Страницы: 1 вся ветка

Текущий архив: 2010.11.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
2-1282107940
TyTuk
2010-08-18 09:05
2010.11.14
Перемещения файлов с нужным расширением.


10-1169756215
Asail
2007-01-25 23:16
2010.11.14
Неполный список книг в Excel 2003


11-1226395089
Dy1
2008-11-11 12:18
2010.11.14
сжатие


2-1281828999
Гость
2010-08-15 03:36
2010.11.14
В каком параметре записана ширина стрелочки у TComboBox?


15-1280779554
Petr V. Abramov
2010-08-03 00:05
2010.11.14
кто какими погодными сайтами пользуется?