XML :: LibXML :: Reader提供错误的匹配元素

时间:2011-11-24 13:51:31

标签: xml perl libxml2

这是我使用XML :: LibXML :: Reader

解析的XML
<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(用于xPath),我无法避免它。另外,出于一些可出租的原因,我想坚持使用XML :: LibXML :: Reader。

请帮忙。

1 个答案:

答案 0 :(得分:2)

PerlMonks处转发。我谦虚地回答那里。