Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Вниз

список 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
15-1281040197
Юрий
2010-08-06 00:29
2010.11.14
С днем рождения ! 6 августа 2010 пятница


15-1280735930
12
2010-08-02 11:58
2010.11.14
Как перезаписать открытый файл Excel на сетевом ресурсе?


2-1282687644
Просто Я
2010-08-25 02:07
2010.11.14
Так что ж такое Лейбл


2-1282575219
mfender
2010-08-23 18:53
2010.11.14
Узнать, есть ли свойство у контрола?


2-1282162174
Kinnermann
2010-08-19 00:09
2010.11.14
Отслеживание изменения экрана





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский