Форум: "Начинающим";
Текущий архив: 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. а прочую работу уже делать со своим XMLDocumentFinalDoc:=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