1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
function GetNode(XmlNode : IXmlNode;NodeName : String) : IXmlNode;
var
i : integer;
begin
Result := nil;
//Les noeuds internes sont traités récursivement
if XMLNode.NodeType <> ntElement then
Exit;
//S'il s'agit d'une feuille
if XMLNode.IsTextElement then
if UpperCase(XmlNode.NodeName) = UpperCase(NodeName) then
begin
Result := XmlNode;
Exit;
end;
// S'il s'agit d'un attribut
for i := 0 to XMLNode.AttributeNodes.Count - 1 do
if UpperCase(XMLNode.AttributeNodes.Nodes[i].NodeName) = Uppercase(NodeName) then
begin
Result := XMLNode.AttributeNodes.Nodes[i];
Exit;
end;
// Si le noeud a des enfants on recherche dedans.
if XMLNode.HasChildNodes then
for I := 0 to XMLNode.ChildNodes.Count - 1 do
begin
Result := GetNode(XmlNode.ChildNodes.Nodes[i],NodeName);
// si on a un resultat on quitte car c'est celui qu'on recherche
if Result <> nil then
Exit;
end;
end; |
Partager