转储 XML::LibXML 个元素
dump XML::LibXML elements
我想转储 xml 文档树,类似于转储 perl 数据类型的方式。
use Data::Dumper;
print Dumper($foo);
递归转储$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' );
我想要一棵 Lib 树 XML - 代表 XML 结构的元素。
您可以使用 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;
}
走树将不透明结构转换为可倾倒的结构。
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('/*')
);
我想转储 xml 文档树,类似于转储 perl 数据类型的方式。
use Data::Dumper;
print Dumper($foo);
递归转储$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' );
我想要一棵 Lib 树 XML - 代表 XML 结构的元素。
您可以使用 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;
}
走树将不透明结构转换为可倾倒的结构。
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('/*')
);