1

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 つあり、子がコードで出力することを意味しますが、ここに別の子がある場合、コードは出力されず、推測できません。 .

前もって感謝します。

4

1 に答える 1

6

ノードを処理するコードを関数でラップし、再帰的に呼び出すだけです。追加のコメントを含む例:

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);
于 2014-02-22T17:26:05.667 に答える