2014-11-24 2 views
0

Я пытаюсь проанализировать XML-файл с помощью XML :: Simple, чтобы подсчитать появление определенных тегов (например, появление разных городских мест, относящихся к заголовку который получает повторяется по всему файлу, чтобы сделать дальнейший анализ чисел, полученных, например:.Анализ XML-файла для подсчета тегов с использованием XML :: Simple

<XML> 
    <title> Teacher </title> 
    <state> TX </state> 
    <city> Dallas </city> 

    <title> Teacher </title> 
    <state> CA </state> 
    <city> Los Angeles </city> 

    <title> Engineer </title> 
    <state> NY </state> 
    <city> Manhattan </city> 

    <title> Engineer </title> 
    <state> NY </state> 
    <city> Manhattan </city> 
</XML> 

мне как-то нужно подсчитать, сколько раз встречается название и другое # локаций так

Учитель: 2 Города: 2

Инженер: 2 Города: 1

Что у меня есть:

#!/usr/bin/env perl 

    use XML::Simple; 
    use Data::Dumper; 

    # initialize variables 
    my $counter = 0; 
    my @titlelist =(); 
    my @citylist =(); 

    # create object 
    $xml = new XML::Simple; 

    # read XML file 
    my $jobs = $xml->XMLin("sample.xml"); 

    print Dumper($jobs); 

    foreach my $titles(@{$jobs->{job}}) { 
     push(@citylist, $titles->{city}); 
     push(@titlelist, $titles->{title}); 
    } 

    print "@titlelist\n"; 
    print "@citylist\n"; 

Я знаю, что это супер основной и я на самом деле не получают ничего, и это потому, что я новичок, который совершенно потерянным с точки зрения того, как логически подойти к этому. Мне действительно нужна помощь, чтобы понять структуру, которую мне нужно использовать, чтобы получить какой-то вывод, похожий на это, и оценил бы любые указатели в правильном направлении. Я в основном просто подталкиваю результаты к массивам прямо сейчас. Должен ли я выполнять сопоставления строк и основываться на этом счетчике городов и заголовков? Нужен ли мне многомерный массив? Любые идеи помогут ... спасибо!

ответ

0

Я могу попытаться указать вам в правильном направлении.

Во-первых, я буду считать, что ваш XML имеет <job> теги вокруг каждого задания и actualy выглядит следующим образом

<XML> 
    <job> 
     <title> Teacher </title> 
     <state> TX </state> 
     <city> Dallas </city> 
    </job> 

Теперь, я собираюсь предложить переименовать переменные в следующем кусочке кода чтобы уточнить, что происходит

my $xml_data = $xml->XMLin("sample.xml"); 

# We want the list of things with the "<job>" tag 
my $jobs = $xml_data->{job}; 

print Dumper($jobs); # this will now print a list (an arrayref) 

# Now we look at each job in the list of jobs 
# You can read this in english as "for each job in jobs" 
foreach my $job (@$jobs) { 
    # each $job has a city and title: 
    print "here is a job in the city $job->{city} with the title $job->{title}\n"; 
} 

Это должно помочь вам в некоторых. На этом этапе вам нужно будет прочитать о том, как хеши работают в Perl. Решение будет выглядеть примерно так, но это не имеет смысла, если вы еще не поняли хэши.

$num_jobs_for{ $title } ++; 
$num_jobs_for_title_in_city{ $title }{ $city } ++ 

Удачи вам! И не стесняйтесь публиковать сообщения, когда вы становитесь дальше.

 Смежные вопросы

  • Нет связанных вопросов^_^