我使用下面的代码来获取正则表达式但不能正常工作..请建议..
<?xml version='1.0'?>
<root>
<category cname='CH1' id='C1'>
<subcat sname='SCName1' sid='SC1'>
我想得到sname&amp; SCID1&amp;的sid属性值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";
}
提前致谢!!!!!!
答案 0 :(得分: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');
答案 1 :(得分:1)
我发现了使用正则表达式的另一种方法....
foreach(@lines)
{
if($_=~/sname\s*=\s*'([^']+)'.*?sid\s*=\s*'([^']+)'/g)
{
$scatval="$1";
if ($scatval eq $subCateGory)
{
$scatid="$2";
$scat_flag=1;
}
}
}