URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6311
[ Назад ]

Исходное сообщение
"Не получается отпарсить данные с помощью XML::LibXML"

Отправлено jr , 29-Мрт-07 09:54 
Не пойму, почему XML::LibXML ничего не парсит?

[host]$ cat test.pl
#!/usr/bin/perl -w

use 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"
Отправлено NuINu , 30-Мрт-07 13:48 
>Не пойму, почему XML::LibXML ничего не парсит?
А что б ты хотел получить? Все он у тебя парсит. Вот твой же код, немного переделанный:
#!/usr/bin/perl -w

use 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


"Не получается отпарсить данные с помощью XML::LibXML"
Отправлено jr , 30-Мрт-07 18:47 
Дружище, спасибо!
Теперь я немного понял, как работать с этой библиотекой.