2011-11-24 76 views
1

这里是我的XML里面我是用XML ::的libxml解析::读者XML ::的libxml ::阅读器给人错误的匹配元素

<world> 
    <country short="usa" name="united state of america"> 
     <state short="CA" name="california"/> 
      <city short="SFO" name="San Franscisco"/> 
      <city short="EM" name="Emeryville"/> 
     <state short="FL" name="florida"/> 
      <city .../> 
      . 
      <city ../> 
    </country> 
    <country short="abc" name="a for apple"> 
     <state ..../> 
    </country> 
</world> 

这里是代码

use XML::LibXML::Reader; 

my $reader = XML::LibXML::Reader->new(location => "map.xml"); 
my $pattern = XML::LibXML::Pattern->new('/world'); 

my @matchedNodes; 

while ($reader->nextPatternMatch($pattern)) 
{ 
    push @matchedNodes, $reader->copyCurrentNode(1); 
} 

@ matchedNodes给了我两个元素。为什么?世界上只有一个标签。我的代码有什么问题?

同样,当我使用该模式

my $pattern = XML::LibXML::Pattern->new('/world/country'); 

它给我,而我只有两个国家标签的四个要素。

请解释我在哪里做错了? 我需要使用Pattern(for xPath),我无法避免它。另外,为了一些兼容性的原因,我想坚持使用XML :: LibXML :: Reader。

请帮助。

+0

Crosspost:http://perlmonks.org/index.pl?node_id=939894 – daxim

回答

2

交叉邮寄于PerlMonks。在那里谦卑地回答我。

+0

感谢您的及时答复。 – rpg