1

以下のコードを使用して正規表現を取得しましたが、正しく機能しません.提案してください..

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

SCName1 & SC1 の sname & sid 属性値を取得したい。以下のコードを使用しました

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

前もって感謝します!!!!!!

4

2 に答える 2

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');
于 2013-11-10T08:04:03.513 に答える
1

正規表現を使用してこれを行う別の方法を見つけました....

foreach(@lines)
{
    if($_=~/sname\s*=\s*'([^']+)'.*?sid\s*=\s*'([^']+)'/g)
    {
        $scatval="$1";
        if ($scatval eq $subCateGory)
        {
        $scatid="$2";   
        $scat_flag=1;
        }
    }
}
于 2013-11-11T07:12:47.940 に答える