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 回答