2014-02-22 76 views
0

我有一個xml,我需要解析xml並遍歷到最後一個子節點,XML將會動態生成,所以我不知道XML的深度,可以我遍歷xml直到它的最後一個孩子和兄弟姐妹(如果有的話)。請解決此問題的幫助:以遞歸方式遍歷perl XML中的XML節點:: LibXML

我的代碼片斷是:

  foreach my $childNodes ($root->findnodes('/')) 
      { 
       print $childNodes->nodePath; 
       print "\n"; 
       if($childNodes->hasChildNodes) 
       { 
        foreach my $gChildNode ($camelid->childNodes) 
        { 
         print $gChildNode->nodePath; 
         print "\n"; 
        } 
      } 

這將輸出節點,直到深度2,但如果深度爲3我的意思是根有一個孩子,孩子我的代碼打印出來但如果這裏有另一個孩子,代碼將不會打印,也不會猜測。我如何找到這個。

在此先感謝。

+0

答案在您的標題中:您需要遞歸。 – ikegami

回答

4

只是包裝代碼來處理函數中的節點並遞歸調用它。一些附加評論的示例:

sub process_node { 
    my $node = shift; 

    print $node->nodePath, "\n"; 

    # No need to check hasChildNodes. If there aren't any 
    # children, childNodes will return an empty array. 
    for my $child ($node->childNodes) { 
     # Call process_node recursively. 
     process_node($child); 
    } 
} 

# documentElement is more straight-forward than findnodes('/'). 
process_node($root->documentElement); 
+0

請找到我的代碼片段作爲我的問題的答案... THankyou您的答覆.. – SriSri

+0

我如何驗證一個特定的節點存在於這個過程中.. – SriSri

+0

@SriSri StackOverflow不像線程討論論壇。如果你需要更多的幫助,你應該開一個新的問題。 – nwellnhof