如何在perl中使用XML::LibXML获取元素的层次结构
How to get the hierarchy structure of an element using XML::LibXML in perl
就像这个 HTML 片段:
<div class="c1"><span class="c2"><b class="c3"/></span></div>
b
元素的预期层次结构应为:div.c1 span.c2 b.c3
XML::LibXML::Node中有parentNode
方法,就是returns父节点。这样您就可以找到您感兴趣的节点 (b
)
然后 'drill' 向上到树的顶部,收集有关节点的适当信息。对于所需的 element.class 格式:
use warnings;
use strict;
use feature 'say';
use XML::LibXML;
my $xml = q(<div class="c1"><span class="c2"><b class="c3"/></span></div>);
my $doc = XML::LibXML->load_xml(string => $xml);
my @hier;
my ($node) = $doc->findnodes('//b'); # only first such node assigned
unshift @hier, join '.', $node->nodeName, $node->getAttribute('class');
while (my $parent = $node->parentNode) {
last if $parent->nodeType == XML_DOCUMENT_NODE; # top, <?xml ...
unshift @hier, join '.', $parent->nodeName, $parent->getAttribute('class');
$node = $parent;
}
say for @hier;
getAttribute
方法在XML::LibXML::Elementclass.
就像这个 HTML 片段:
<div class="c1"><span class="c2"><b class="c3"/></span></div>
b
元素的预期层次结构应为:div.c1 span.c2 b.c3
XML::LibXML::Node中有parentNode
方法,就是returns父节点。这样您就可以找到您感兴趣的节点 (b
)
然后 'drill' 向上到树的顶部,收集有关节点的适当信息。对于所需的 element.class 格式:
use warnings;
use strict;
use feature 'say';
use XML::LibXML;
my $xml = q(<div class="c1"><span class="c2"><b class="c3"/></span></div>);
my $doc = XML::LibXML->load_xml(string => $xml);
my @hier;
my ($node) = $doc->findnodes('//b'); # only first such node assigned
unshift @hier, join '.', $node->nodeName, $node->getAttribute('class');
while (my $parent = $node->parentNode) {
last if $parent->nodeType == XML_DOCUMENT_NODE; # top, <?xml ...
unshift @hier, join '.', $parent->nodeName, $parent->getAttribute('class');
$node = $parent;
}
say for @hier;
getAttribute
方法在XML::LibXML::Elementclass.