最新の更新情報

2012年2月
« 1月    
 1234
567891011
12131415161718
19202122232425
26272829  

本ブログのURL

qrcode.png

雨雲の動き

お天気

 
 
吟遊詩人の戯言 内専用の記事検索...
 
 

【Delphi】IXMLDOMNodeのノード追跡用コードのサンプル


キーワード(クリックで関連記事が読めます) → , , , ,

関連記事



 
 

必要に迫られて,書き起こしてみた

悔いは無い(爆

また,どっかでこの手の追っかけ部,実装作業があったときの
自分自身のサンプル用に

次はC#辺りで,やりそう


なお,どことなく,ORCA~Claimの香りがするのは気のせいではない(笑

DELPHI:
  1. //**********************************************
  2. //指定ノードの検索(再帰利用)
  3. //
  4. //nd : 検索開始点のノード (IXMLDOMNode)
  5. //ndName : 検索対象のノード名称
  6. //
  7. //return : 見つけたノードオブジェクト(見つからなかったらnull)
  8. //**********************************************
  9. function TClaimInput.SearchNode(nd: IXMLDOMNode; ndName: string): IXMLDOMNode;
  10. var
  11.     i : integer;
  12.     st : string;
  13. begin
  14.  
  15.     result := nil;
  16.     for i  :=  0 to  nd.childNodes.Get_length - 1  do
  17.     begin
  18.         st := nd.childNodes.item[i].Get_nodeName();
  19.         if  st = ndName then
  20.          begin
  21.             result := nd.childNodes.item[i];
  22.          end
  23.         else
  24.          begin
  25.             result := SearchNode(nd.childNodes.item[i], ndName);
  26.          end;
  27.  
  28.         if result <> nil then
  29.         begin
  30.             break;
  31.         end;
  32.     end;
  33. end;
  34.  
  35. //**********************************************
  36. //指定ノードの検索(再帰利用)(Overload)
  37. //
  38. //nd : 検索開始点のノード (IXMLDOMNode)
  39. //ndName : 検索対象のノード名称
  40. //attrName : 検索対象のノード属性名称
  41. //attrVal  : 検索対象のノード属性値
  42. //
  43. //return : 見つけたノードオブジェクト(見つからなかったらnull)
  44. //**********************************************
  45. function TClaimInput.SearchNode(nd: IXMLDOMNode; ndName: string; attrName : string; attrVal : string): IXMLDOMNode;
  46. var
  47.     i : integer;
  48.     j : integer;
  49.     stn : string;
  50.     stv : string;
  51.  
  52.     fl : boolean;
  53. begin
  54.  
  55.     result := nil;
  56.     for i  :=  0 to  nd.childNodes.Get_length - 1  do
  57.     begin
  58.         fl := false;
  59.  
  60.         stn := nd.childNodes.item[i].Get_nodeName();
  61.         if  stn = ndName then
  62.          begin
  63.             for j := 0 to nd.childNodes.item[i].attributes.Get_length - 1 do
  64.             begin
  65.                 stn := nd.childNodes.item[i].attributes.item[j].Get_nodeName();
  66.                 stv := nd.childNodes.item[i].attributes.item[j].Get_text();
  67.                 if (stn = attrName) and (stv = attrVal) then
  68.                 begin
  69.                     fl := true;
  70.                     break;
  71.                 end;
  72.             end;
  73.          end;
  74.  
  75.         if fl = true then
  76.          begin
  77.             result := nd.childNodes.item[i];
  78.          end
  79.         else
  80.          begin
  81.             result := SearchNode(nd.childNodes.item[i], ndName, attrName, attrVal);
  82.          end;
  83.  
  84.         if result <> nil then
  85.         begin
  86.             break;
  87.         end;
  88.     end;
  89. end;
  90.  
  91. //**********************************************
  92. //指定ノードの1層上のノードを返す
  93. //
  94. //nd : 検索開始点のノード (IXMLDOMNode)
  95. //
  96. //return : 一個上位のノードオブジェクト
  97. //**********************************************
  98. function TClaimInput.SearchNodeParent(nd: IXMLDOMNode): IXMLDOMNode;
  99. begin
  100.     result := nd.Get_parentNode;
  101. end;

 
 
 
 

コメントを残す

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">