извлечение атрибутов из xml с помощью perl

#perl

#perl

Вопрос:

xml-файл выглядит следующим образом

 <properties>
    <property object="tournament_stage" objectFK="820745" type="metadata" name="International" value="no" del="no" n="0" ut="2010-07-28 08:58:34" id="10533355"/>
    <property object="tournament_stage" objectFK="820745" type="metadata" name="Cup" value="no" del="no" n="0" ut="2010-07-28 08:58:34" id="10533356"/>
    <property object="tournament_stage" objectFK="820745" type="metadata" name="Live" value="yes" del="no" n="0" ut="2010-07-28 08:58:35" id="10533357"/>
    <property object="tournament_stage" objectFK="820745" type="metadata" name="Note" value="LIVE:DK: Goalscores (from the list) and Spectators (Redcards, Yellowcards, (Lineup, Formation and Subs. added from Pakistan For all light matches (not livestats matches)) (Squads : DK)" del="no" n="1" ut="2010-08-20 18:34:32" id="10533358"/>
    <property object="tournament_stage" objectFK="820745" type="metadata" name="Ranking" value="1" del="no" n="0" ut="2010-07-28 08:58:35" id="10533359"/>
</properties>
  

вот xml-файл, из которого я хочу извлечь значение objectFK и идентификатор, также я хочу посчитать количество объектов
это означает, что если начальной строкой в дереве является «property object», то считайте ее равной 1.
для этого здесь есть 3 объекта.

Я хочу использовать только модуль cpan.

Комментарии:

1. Используйте XML::Parser

Ответ №1:

Просто используйте анализатор XML, такой как XML::LibXML или XML::Twig :

 use strict;
use warnings;

use XML::LibXML;

my $xml = XML::LibXML->load_xml(IO => *DATA);

for my $property ($xml->findnodes('//property')) {
    print $property->getAttribute('objectFK') . ' ' . $property->getAttribute('id') . "n";
}

__DATA__
    <properties>
        <property object="tournament_stage" objectFK="820745" type="metadata" name="International" value="no" del="no" n="0" ut="2010-07-28 08:58:34" id="10533355"/>
        <property object="tournament_stage" objectFK="820745" type="metadata" name="Cup" value="no" del="no" n="0" ut="2010-07-28 08:58:34" id="10533356"/>
        <property object="tournament_stage" objectFK="820745" type="metadata" name="Live" value="yes" del="no" n="0" ut="2010-07-28 08:58:35" id="10533357"/>
        <property object="tournament_stage" objectFK="820745" type="metadata" name="Note" value="LIVE:DK: Goalscores (from the list) and Spectators (Redcards, Yellowcards, (Lineup, Formation and Subs. added from Pakistan For all light matches (not livestats matches)) (Squads : DK)" del="no" n="1" ut="2010-08-20 18:34:32" id="10533358"/>
        <property object="tournament_stage" objectFK="820745" type="metadata" name="Ranking" value="1" del="no" n="0" ut="2010-07-28 08:58:35" id="10533359"/>
    </properties>
  

Выводит:

 820745 10533355
820745 10533356
820745 10533357
820745 10533358
820745 10533359