【问题标题】:How to count number of levels (depth) in XML branch in perl XML::LibXML?如何计算 perl XML::LibXML 中 XML 分支中的层数(深度)?
【发布时间】:2014-10-15 13:43:20
【问题描述】:

我有一个非常简单的问题。我想查找 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>

从第一个(根)跨度标记计算时,深度计数应为 5。 我正在使用 XML::Libxml。 谢谢。

【问题讨论】:

  • 你有没有尝试过?如果我们能修复您的代码,我们会更容易提供帮助。
  • @simbabque 我尝试使用 XPath 的 count(ancestor::*) 方法(因为在具有最大祖先计数的节点中是分支深度)。但我找不到将它们与 XML::LibXML::Node 集成的方法。可能 XML::LibXML::XPathExpression 可能会有所帮助,但我也无法使用它来工作。

标签: xml perl xpath libxml2 xml-libxml


【解决方案1】:
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('*');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多