2011-06-23 116 views
0

如何使用XMLParser的,以獲得該項目中的XML內容 - > @網址,項目 - > @替換和項目 - > 「內在價值」爲內容的節點,在項目的字符串 - > @錐= 「一」?Perl的XML解析器獲取XML

<cstep> 
    <item cone="one" 
     url="http://google.com/{ccc}/cthree" 
     replace="{ccc}"> 
      <itemsub conesub="conesub"> 
        <itemsubsub conesubsub="conesubsub" /> 
      </itemsub>  
    </item> 
    <item cone="two" 
     url="http://google.com/{ccc}/cthree" 
     replace="{ccc}"> 
      <itemsub conesub="conesub"> 
        <itemsubsub conesubsub="conesubsub" /> 
      </itemsub>  
    </item> 
</cstep> 
+0

你是什麼意思? – toolic

+0

基本上我試圖讓整個itemsub節點作爲字符串 – user391986

回答

3

XML::Twig

use warnings; 
use strict; 
use XML::Twig; 

my $str = <<EOF; 
    <cstep> 
     <item cone="one" 
      url="http://google.com/{ccc}/cthree" 
      replace="{ccc}"> 
       <itemsub conesub="conesub"> 
         <itemsubsub conesubsub="conesubsub" /> 
       </itemsub>  
     </item> 
     <item cone="two" 
      url="http://google.com/{ccc}/cthree" 
      replace="{ccc}"> 
       <itemsub conesub="conesub"> 
         <itemsubsub conesubsub="conesubsub" /> 
       </itemsub>  
     </item> 
    </cstep> 
EOF 

my $t = XML::Twig->new(twig_handlers => {'cstep/item' => \&item }); 
$t->parse($str); 

sub item { 
    my ($t, $item) = @_; 
    if ($item->att('cone') eq 'one') { 
     print $item->att('url' ), "\n"; 
     print $item->att('replace'), "\n"; 
    } 
} 

__END__ 

http://google.com/{ccc}/cthree 
{ccc} 

更新:要回答在評論有關分配到$url子外的問題:通過 「裏面的值」

my $t = XML::Twig->new(twig_handlers => {'cstep/item' => \&item }); 
my $url; 
$t->parse($str); 
print "$url\n"; 

sub item { 
    my ($t, $item) = @_; 
    if ($item->att('cone') eq 'one') { 
     $url = $item->att('url'); 
     print $item->att('replace'), "\n"; 
    } 
} 
+1

太棒了謝謝你!我怎樣才能將內容(基本上是整個節點itemsub)作爲一個字符串? – user391986

+0

不客氣。如文檔中所示,使用'children'方法。 – toolic

+1

@ user391986獲取'itemsub'的字符串使用'my $ itemsub = $ item-> first_child('itemsub') - > xml_string;' – mirod