2013-11-10 109 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