Не пойму, почему XML::LibXML ничего не парсит?[host]$ cat test.pl
#!/usr/bin/perl -wuse strict;
use XML::LibXML;
use Data::Dumper;my $xml =qq(
<a>
<b>bb</b>
<cc>
<d>ddd</d>
<e>eee</e>
</cc>
</a>);
print $xml;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_string( $xml );
my $root = $doc->getDocumentElement();
my @a = $root->getElementsByTagName( 'a' );print "parcer: \n" . Dumper $parser;
print "doc: \n" . Dumper $doc;
print "root: \n" . Dumper $root;
print "a: \n" . Dumper @a;Непосредственно сам вывод скрипта
[host]$ ./test.pl
<a>
<b>bb</b>
<cc>
<d>ddd</d>
<e>eee</e>
</cc>
</a>parcer:
$VAR1 = bless( {
'XML_LIBXML_CALLBACK_STACK' => bless( {
'_CALLBACKS' => []
}, 'XML::LibXML::InputCallback' ),
'XML_LIBXML_KEEP_BLANKS' => 1,
'XML_LIBXML_EXT_DTD' => 1,
'_State_' => 0
}, 'XML::LibXML' );
doc:
$VAR1 = bless( do{\(my $o = 135846048)}, 'XML::LibXML::Document' );
root:
$VAR1 = bless( do{\(my $o = 135840048)}, 'XML::LibXML::Element' );
a:
>Не пойму, почему XML::LibXML ничего не парсит?
А что б ты хотел получить? Все он у тебя парсит. Вот твой же код, немного переделанный:
#!/usr/bin/perl -wuse strict;
use XML::LibXML;
use Data::Dumper;my $xml = <<END_XML;
<a>
<b>bb1</b>
<b>bb2</b>
<b>bb3</b>
<b>bb4</b>
<cc>
<d>ddd</d>
<e>eee</e>
</cc>
</a>
END_XML
print $xml;my $parser = XML::LibXML->new();
my $doc = $parser->parse_string( $xml );
my $root = $doc->getDocumentElement();
my ($name, $cont);
my @b = $root->getElementsByTagName( 'b' );
foreach my $b1 (@b) {
$name = $b1->nodeName;
$cont = $b1->textContent;
print "selected $name = $cont\n";
}вот вывод:
selected b = bb1
selected b = bb2
selected b = bb3
selected b = bb4
Дружище, спасибо!
Теперь я немного понял, как работать с этой библиотекой.