Entw.: IE-Programmierung (2)
Der Internet Exploxer vom Windows-Betriebssystem lässt sich direkt in einer Client-Applikation einbinden und
programmieren. Im folgenden Artikel werden dazu einige Programmiertechniken gezeigt, mit denen man Web-Seiten automatisch
auslesen und auswerten kann.
Es handelt sich hier um den 2. Teil einer Artikelserie.
Alle Texte zu einem Attributtyp
Diese rekursive Funktion liefert alle Texte bzw. Werte zu einem Attributtyp von allen DOM-Nodes unterhalb des vorgegebenen DOM-Node aNode:
function GetAllStringsForAttrType(const aNode: IHTMLDomNode;
const aAttrType: String;
var aListe: TStringList): Boolean;
var
l_oActNode, l_oNextNode, l_oChildNode: IHTMLDomNode;
l_oAtt: IHTMLDOMAttribute2;
begin
Assert(Assigned(aListe));
if Assigned(aNode) then begin
l_oActNode := aNode;
repeat
if GetAttributeByName(l_oActNode,aAttrType,l_oAtt) then begin
if (l_oAtt.value <> '') and (l_oAtt.value <> 'null') then begin
aListe.Add(l_oAtt.value);
end;
end;
if l_oActNode.hasChildNodes then begin
l_oChildNode := l_oActNode.FirstChild;
GetAllStringsForAttrType(l_oChildNode,aAttrType,aListe);
end;
l_oNextNode := l_oActNode.NextSibling;
l_oActNode := l_oNextNode;
until not Assigned(l_oActNode);
end;
Result := aListe.Count > 0;
end;
Ermitteln aller Id's
Die Funktion ermittelt alle Id's von allen DOM-Nodes unterhalb des vorgegebenen DOM-Node aNode. Alle Id's werden in der String-Liste aListe gespeichert.
function GetAllIdNames(aNode: IHTMLDomNode;
var aListe : TStringList): Boolean;
begin
Assert(Assigned(aListe));
aListe.Clear;
Result := GetAllStringsForAttrType(aNode,'ID',aListe);
end;
Ermitteln aller Namen
Die Funktion ermittelt alle Namen von allen DOM-Nodes unterhalb des vorgegebenen DOM-Node aNode. Alle Namen werden in der String-Liste aListe gespeichert.
function GetAllNames(aNode: IHTMLDomNode;
var aListe : TStringList): Boolean;
begin
Assert(Assigned(aListe));
aListe.Clear;
Result := GetAllStringsForAttrType(aNode,'NAME',aListe);
end;
Ermitteln aller Klassen-Namen
Die Funktion ermittelt alle Klassennamen von allen DOM-Nodes unterhalb des vorgegebenen DOM-Node aNode. Alle Klassennamen werden in der String-Liste aListe gespeichert.
function GetAllClassNames(aNode: IHTMLDomNode;
var aListe : TStringList): Boolean;
begin
Assert(Assigned(aListe));
aListe.Clear;
Result := GetAllStringsForAttrType(aNode,'CLASS',aListe);
end;
Umwandeln von IHTMLDomNode und IHTMLElement
Bei der IE-Programmierung ist es oft notwendig, zwischen den Datentypen IHTMLDomNode und IHTMLElement zu wechseln. Dazu sollte man immer die Funktion Supports verwenden.
Beispiel 1: Umwandlung von IHTMLDomNode nach IHTMLElement:
var
l_oHTMLDomNode: IHTMLDomNode;
l_oIHTMLElement: IHTMLElement;
begin
l_oHTMLDomNode := ...
if Supports(l_oHTMLDomNode, IHTMLElement, l_oIHTMLElement) then
...
...
end;
Beispiel 2: Umwandlung von IHTMLElement nach IHTMLDomNode:
var
l_oHTMLDomNode: IHTMLDomNode;
l_oIHTMLElement: IHTMLElement;
begin
l_oIHTMLElement := ...
if Supports(l_oIHTMLElement, IHTMLDomNode, l_oHTMLDomNode) then
...
...
end;
Copyright © 07.01.2013 hadv.de. All Rights Reserved.