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



我有一个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,我的意思是根有一个子节点,我的代码打印它,但如果这里有另一个子节点,代码将不会打印并且无法猜测..我怎么能找到这个.

提前谢谢。

只需包装代码即可在函数中处理节点并递归调用它。带有一些附加注释的示例:

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

相关内容

  • 没有找到相关文章

最新更新