2012-01-23 48 views
1

我有以下給出格式的xml。我想要得到Project/ItemGroup/ReferenceHintPath的編號。我還需要獲取Project/ItemGroup/ReferencePrivate節點的數量和節點文本False。我如何用Perl腳本來做到這一點?具有特定值的計數節點

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> 
    <ItemGroup> 
    <Reference Include="IronPython, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\shared\IronPython-1.1\IronPython.dll</HintPath> 
    </Reference> 
    <Reference Include="log4net, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\binaries\log4net.dll</HintPath> 
     <Private>False</Private> 
    </Reference> 
    </ItemGroup> 
</Project> 
+2

您的XML格式不正確,請您在尋求幫助之前花時間檢查您的數據。謝謝。 – mirod

+0

@mirod:更新了正確的xml – Manu

回答

1

您可以使用XML::Simple

#!/usr/bin/perl 

use XML::Simple 'XMLin'; 

my $xml = XMLin(join("\n", <DATA>), ForceArray => [ 'Reference' ]); 

foreach my $reference (@{ $xml->{ItemGroup}{Reference} }) 
{ 
    # count the HintPath and Private (where False) elements in $reference 
} 

__DATA__ 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
     ToolsVersion="3.5"> 
    <ItemGroup> 
    <Reference Include="IronPython, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\shared\IronPython-1.1\IronPython.dll</HintPath> 
    </Reference> 
    <Reference Include="log4net, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\binaries\log4net.dll</HintPath> 
     <Private>False</Private> 
    </Reference> 
    </ItemGroup> 
</Project> 
2

下面是使用XML解決方案::嫩枝。任何類似XML :: LibXML的DOM模塊也可以以非常類似的方式工作。

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::Twig; 

my $t= XML::Twig->new->parse(\*DATA); 
foreach my $reference ($t->findnodes('/Project/ItemGroup/Reference')) 
    { print "HintPath count: ", $reference->children_count('HintPath'), "\n"; 
    my $private= $reference->descendants('Private[text()="False"]'); 
    print "False Private count: $private\n"; 
    } 

__DATA__ 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> 
    <ItemGroup> 
    <Reference Include="IronPython, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\shared\IronPython-1.1\IronPython.dll</HintPath> 
    </Reference> 
    <Reference Include="log4net, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\binaries\log4net.dll</HintPath> 
     <Private>False</Private> 
    </Reference> 
    </ItemGroup> 
</Project> 
相關問題