IXMLNode
1 отговора
69 прегледа
IXMLNode
Вижте този код:
procedure TForm1.btnTest3Click(Sender: TObject);
var
a: IXMLNode;
function CreateParagraph(const StyleClass: DOMString = 'Normal'): IXMLNode;
begin
Result := NewXMLDocument.CreateNode('para');
Result.Attributes['styleclass'] := StyleClass;
end;
begin
a := CreateParagraph;
//a := NewXMLDocument.CreateNode('para');
//a.Attributes['styleclass'] := 'NormalTH';
a.AddChild('abc'); //exception
end;
При опит за добавяне на дъщерен елемент към а възниква изключение. Атрибути, обаче, могат да се добавят. Ако реда "a := CreateParagraph;" се замени с долните два, които са закоментирани, всичко е наред. Стигам до извода, че когато присвоим на а стойност, върната от функция, не може да и се добавят дъщерни елементи. Но защо е така? Има ли нещо общо с интерфейсите?
procedure TForm1.btnTest3Click(Sender: TObject);
var
a: IXMLNode;
function CreateParagraph(const StyleClass: DOMString = 'Normal'): IXMLNode;
begin
Result := NewXMLDocument.CreateNode('para');
Result.Attributes['styleclass'] := StyleClass;
end;
begin
a := CreateParagraph;
//a := NewXMLDocument.CreateNode('para');
//a.Attributes['styleclass'] := 'NormalTH';
a.AddChild('abc'); //exception
end;
При опит за добавяне на дъщерен елемент към а възниква изключение. Атрибути, обаче, могат да се добавят. Ако реда "a := CreateParagraph;" се замени с долните два, които са закоментирани, всичко е наред. Стигам до извода, че когато присвоим на а стойност, върната от функция, не може да и се добавят дъщерни елементи. Но защо е така? Има ли нещо общо с интерфейсите?
Re: IXMLNode
Защо не опиташ това:
function CreateParagraph(const StyleClass: DOMString = 'Normal'): IXMLNode;
var
b: IXMLNode;
begin
try
b := NewXMLDocument.CreateNode('para');
b.Attributes['styleclass'] := StyleClass;
except
b:=nil;
end;
Result:=b;
end;
function CreateParagraph(const StyleClass: DOMString = 'Normal'): IXMLNode;
var
b: IXMLNode;
begin
try
b := NewXMLDocument.CreateNode('para');
b.Attributes['styleclass'] := StyleClass;
except
b:=nil;
end;
Result:=b;
end;