我想转储xml doc树,类似于可以转储perl数据类型的方式。
use Data::Dumper;
print Dumper($foo);
Recursivly转储$foo
包含的结构(即使存在循环依赖关系)。
然而
use XML::LibXML;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($filename);
my @nodes = $doc->findnodes($path);
foreach(@nodes)
{
print Dumper($_);
}
只需打印
等内容$VAR1 = bless( do{\(my $o = 46232224)}, 'XML::LibXML::Element' );
我想得到一个LibXML树 - 代表XML结构的元素。
答案 0 :(得分:4)
您可以使用LibXML::Node
的serialize
方法:
use XML::LibXML;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($filename);
my @nodes = $doc->findnodes($path);
foreach my $node (@nodes)
{
print $node->serialize;
}
答案 1 :(得分:3)
走树,将不透明结构转换为可转储结构。
use XML::LibXML qw(:libxml);
use Data::Visitor::Callback qw();
my $v = Data::Visitor::Callback->new(
'XML::LibXML::Text' => sub {
my ($v, $node) = @_;
return ($node->nodeValue =~ qr/\S/)
? {
n => $node->nodeName,
t => $node->nodeType,
v => $node->nodeValue,
}
: (); # skip whitespace text nodes
},
'XML::LibXML::Element' => sub {
my ($v, $node) = @_;
return {
c => [grep $_, $v->visit($node->childNodes)],
n => $node->nodeName,
t => $node->nodeType,
};
},
);
use DDP; p $v->visit(
XML::LibXML->new->parse_file('foo.xml')->findnodes('/*')
);