Главная страница
    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-1280398205
Пит
2010-07-29 14:10
2010.11.14
Сообщения об ошибках - головоломки


15-1280494350
12
2010-07-30 16:52
2010.11.14
Давайте про астрономию поговорим-пофантазируем?


2-1282041589
Dmitriy
2010-08-17 14:39
2010.11.14
создание объекта в DLL


15-1281080893
Knight
2010-08-06 11:48
2010.11.14
Как сделать быструю загрузку файла для просмотра?


3-1247500268
AndrewG
2009-07-13 19:51
2010.11.14
Blob & TOleContainer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский