我有一个非常简单的问题。我想找到XML分支的级别数。像:
<span>
<span>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline">
<msup>
<mn>34</mn>
<mi>o</mi>
</msup>
</math>
<span> </span>
</span>
</span>
从第一个(根)span标记计算时,深度计数应为5。 我正在使用XML :: Libxml。 感谢。
答案 0 :(得分:6)
use List::Util qw( max );
sub max_depth {
my ($ele) = @_;
return 1 + max 0, map max_depth($_), $ele->findnodes('*');
}
以下接受任何类型的节点而不仅仅是元素节点(例如文档节点):
use List::Util qw( max );
use XML::LibXML qw( XML_ELEMENT_NODE );
sub max_depth {
my ($node) = @_;
my $base = $node->nodeType == XML_ELEMENT_NODE ? 1 : 0;
return $base + max 0, map max_depth($_), $node->findnodes('*');
}