使用XML :: Simple解析XML文件以计算标记出现次数

时间:2014-11-24 05:41:10

标签: arrays xml perl parsing xml-simple

我正在尝试使用XML :: Simple解析XML文件,以便计算特定标记的出现次数(即特定于标题的不同城市位置的出现,以便在整个文件中重复以进行进一步分析关于产生的数字。例如:

<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";

我知道这是超级基本的,我还没有真正产生任何东西,这是因为我是一个初学者,在如何理解这个方面完全迷失了。我真的需要帮助来理解我需要使用的结构来获得类似于此的某种输出,并且会欣赏正确方向上的任何指针。我现在基本上只是将结果推送到数组。我应该进行字符串比较,并根据增量城市和标题计数器进行吗?我需要一个多维数组吗?任何想法都会有所帮助......谢谢!

1 个答案:

答案 0 :(得分:0)

我可以试着指出你正确的方向。

首先,我假设您的xml在每个作业周围都有<job>个标签,并且实际上看起来像这样

<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 } ++
祝你好运!当你走得更远时,随时再发帖。