递归遍历perl XML :: LibXML中的XML节点

时间:2014-02-22 17:13:18

标签: xml perl xml-libxml

我有一个xml,我需要解析xml并遍历到最后一个孩子,XML将动态生成,所以我不知道XML的深度,我可以迭代xml直到它的最后一个孩子和兄弟姐妹如果有的话。请帮助解决此问题:

我的代码段是:

            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我的意思是根有一个孩子而孩子我的代码打印它但是如果这里有另一个孩子代码将不打印并且无法猜测..如何我找到了这个。

提前致谢。

1 个答案:

答案 0 :(得分:5)

只需包装代码即可处理函数中的节点并以递归方式调用它。示例以及一些其他注释:

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);