2013-11-10 2 views
1

Я использовал ниже код, чтобы получить регулярное выражение, но не работает должным образом .. Просьба предложить ..Регулярное выражение для значения атрибута ПОЛУЧИТЬ

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

Я хочу, чтобы получить SNAME & с.и.д. атрибуты значение 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 !! Но мне нужно получить sname & sid в subcat ... – Vasanth

+0

Я обновил свой ответ. – gangabass

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