Portál AbcLinuxu, 24. dubna 2024 22:13


Dotaz: Perl + XPath rovnaké tágy

10.12.2006 22:28 dusan456 | skóre: 12 | Poprad
Perl + XPath rovnaké tágy
Přečteno: 212×
Odpovědět | Admin
Chcem použiť XPath na extraktovanie textu z XML dokumentu. Takto nejako vypadá môj aaa.xml
<document>
<result>
<A>
nieco1
</A>
<B>
<text>
nieco2
</text>
</B>
<B>
<text>
nieco3
</text>
</B>
</result>
<result>
...
</document>

a takto nejako vypadá môj pelrový skript na extraktovanie
use strict;
use DBI;
use XML::XPath;
use XML::XPath::XMLParser;

my $dbh = DBI->connect ("DBI:mysql:test", "root", "", { RaiseError => 1, PrintError => 0});
my $xp = XML::XPath->new (filename => "aaa.xml");
my $nodelist = $xp->find ("//result");
foreach my $row ($nodelist->get_nodelist ())
{
$dbh->do (
"INSERT INTO tabulka (a, b_prva, b_druha) VALUES (?,?,?)",
undef,
$row->find ("A")->string_value (),
$row->find ("B/text")->string_value (),
$row->find ("B/text")->string_value ()
);

}
$dbh->disconnect ();

Problem je v tom, že B/text je obsiahnuté dva razy v tom XML dokumente a do tabulky vloží vždy prvú hodnotu aj do druhého a aj do tretieho stĺpca. Vie niekto poradiť? Ďakujem
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.12.2006 23:26 Petr
Rozbalit Rozbalit vše Re: Perl + XPath rovnaké tágy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Např. pomocí "B[1]/text" a "B[2]/text".
10.12.2006 23:32 dusan456 | skóre: 12 | Poprad
Rozbalit Rozbalit vše Re: Perl + XPath rovnaké tágy
Perfektneee, dakujem.

Ja som skusal "B/text[1]" a "B/text[2]", preto mi to nefungovalo, tak som myslel, ze v tom to nebude.
Fuky avatar 10.12.2006 23:33 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Perl + XPath rovnaké tágy
Odpovědět | | Sbalit | Link | Blokovat | Admin

use strict;
use DBI;
use XML::XPath;

my $xp = XML::XPath->new(filename => 'soubor.xml');

foreach my $row ($xp->findnodes('//result')) {
  print $row->find('A')->string_value;

  foreach my $row ($xp->findnodes('//result/B')) {
    print $row->find('text')->string_value;
  }
}

-- RÁMO: psí tábor , ETriatlon: Výuka plavání
9.4.2009 22:39 Jezza
Rozbalit Rozbalit vše Re: Perl + XPath rovnaké tágy

Mam takovyto xml soubor: fi.muni.cz/~xjezek2/temp/forum.xml

 

Chci z nej dostat urcita data a pouzivam na to upraveny skript z tohoto fora:

use strict;
use DBI;
use XML::XPath;

my $xp = XML::XPath->new(filename => 'def.xml');

foreach my $row ($xp->findnodes('//oval_definitions/definitions/definition/metadata')) {
  print "title = ";
    print $row->find('title')->string_value;
 
    foreach my $row ($xp->findnodes('//oval_definitions/definitions/definition/metadata/affected')) {
  print "platform = ";
    print $row->find('platform')->string_value; ## jak na vice platfotm?    Jak ulozit hodnotu tagu do promente, jak vypsat atribut tagu?
   
    }
}

 

Potreboval bych dostat informace z tagu platform, ktery je v jedne urovni vicekrat.

Dale bych se chtel zeptat, jak ulozit do promenne tato ziskana data misto toho, ze se tisknout...zkousel jsem to ruzne, ale pise by to chyby.

Posledni dotaz je, lze ziska nejen hodnotu tagu, ale i jeho atributy, jako je treba i tagu <definition> comment a id?

Predem diky

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.