Ниже приведена лишь небольшая часть XML-кода, над которым я работаю. Я хочу извлечь все атрибуты, имя тега и тексты в поддереве.
<?xml version='1.0' encoding='UTF-8'?>
<Warehouse>
<Equipment id="ABC001" model="TV" version="3_00">
<attributes>
<Location>Chicago</Location>
<Latitude>30.970</Latitude>
<Longitude>-90.723</Longitude>
</attributes>
</Equipment></Warehouse>
Я закодировал пример, подобный этому:
#!/usr/bin/perl
use XML::LibXML;
use Data::Dumper;
$parser = XML::LibXML->new();
$Chunk = $parser->parse_file("numone.xml");
@Equipment = $Chunk->findnodes('//Equipment');
foreach $at ($Equipment[0]->getAttributes()) {
($na,$nv) = ($at -> getName(),$at -> getValue());
print "$na => $nv\n";
}
@Equipment = $Chunk->findnodes('//Equipment/attributes');
@Attr = $Equipment[0]->childNodes;
print Dumper(@Attr);
foreach $at (@Attr) {
($na,$nv) = ($at->nodeName, $at->textContent);
print "$na => $nv\n";
}
Я получаю такие результаты:
id => ABC001
model => TV
version => 3_00
$VAR1 = bless( do{\(my $o = 10579528)}, 'XML::LibXML::Text' );
$VAR2 = bless( do{\(my $o = 13643928)}, 'XML::LibXML::Element' );
$VAR3 = bless( do{\(my $o = 13657192)}, 'XML::LibXML::Text' );
$VAR4 = bless( do{\(my $o = 13011432)}, 'XML::LibXML::Element' );
$VAR5 = bless( do{\(my $o = 10579752)}, 'XML::LibXML::Text' );
$VAR6 = bless( do{\(my $o = 10565696)}, 'XML::LibXML::Element' );
$VAR7 = bless( do{\(my $o = 13046400)}, 'XML::LibXML::Text' );
#text =>
Location => Chicago
#text =>
Latitude => 30.970
#text =>
Longitude => -90.723
#text =>
Атрибуты извлечения выглядят нормально, однако извлечение имени тега и текста получили дополнительное содержимое.
Мои вопросы:
- Откуда взялись эти элементы
::Text
?
- Как мне избавиться от этих дополнительных элементов и
#text
вещей?
Спасибо