2013-11-10 108 views
1

正則表達式我用下面的代碼來獲得正則表達式,但不能正常工作。請建議..用於獲取屬性值

<?xml version='1.0'?> 
<root> 
<category cname='CH1' id='C1'> 
<subcat sname='SCName1' sid='SC1'> 

我想SNAME &的SID屬性SCName1 & SC1的價值。我用下面的代碼

use File::Slurp; 
my $filename='nba.xml'; 
my @lines = read_file($filename) ; 
foreach (@lines) { 
    $_=~/sname\s*=\s*'([^']+)'.*?sid\s*=\s*'([^']+)'/g; 
    print "$1,$2\n"; 
    $comp1="$1"; 
    $comp2="$2"; 
} 

在此先感謝!!!!!!

回答

1

我找到了另一種方式來做到這一點使用正則表達式....

foreach(@lines) 
{ 
    if($_=~/sname\s*=\s*'([^']+)'.*?sid\s*=\s*'([^']+)'/g) 
    { 
     $scatval="$1"; 
     if ($scatval eq $subCateGory) 
     { 
     $scatid="$2"; 
     $scat_flag=1; 
     } 
    } 
} 
4

您需要使用XML解析器但是不是正則表達式來解析XML!

use XML::LibXML; 

my $doc = XML::LibXML->load_xml(string => <<'EOT'); 
<root> 
<category cname='CH1' id='C1'/> 
<subcat sname='SCName1' sid='SC1'/> 
</root> 
EOT 

my $xpc = XML::LibXML::XPathContext->new($doc); 

my $sname = $xpc->findvalue('//subcat/@sname'); 
my $sid = $xpc->findvalue('//subcat/@sid'); 
+0

謝謝gangabass!但我需要在subcat中獲取sname&sid ... – Vasanth

+0

我已經更新了我的答案。 – gangabass