2013-07-21 67 views
0

這裏是第一個示例中調用documentElemtent多餘的?XML :: LibXML:doc - root

#!/usr/bin/env perl 
use warnings; 
use strict; 
use XML::LibXML; 

my $file = 'xml_file'; 

my $doc = XML::LibXML->load_xml(location => $file); 
my $root = $doc->documentElement(); 
my $xpc = XML::LibXML::XPathContext->new($root); 
# ... 
say $_->nodeName for $xpc->findnodes('/'); 

輸出

#document 

$doc = XML::LibXML->load_xml(location => $file); 
$xpc = XML::LibXML::XPathContext->new($doc); 
# ... 
say $_->nodeName for $xpc->findnodes('/'); 

輸出也

#document 
+2

如果有根節點上聲明namepsaces它可能關係。 – ikegami

回答

2

在主題節點中定義的任何前綴都由xpc採用,因此如果在根節點上定義了前綴,則這兩個前綴不同。

use warnings; 
use strict; 
use feature qw(say); 

use XML::LibXML qw(); 

my $xml = <<'__EOI__'; 
<root xmlns:foo="uri:xxx"> 
<foo:bar/> 
</root> 
__EOI__ 

my $doc = XML::LibXML->load_xml(string => $xml); 
my $root = $doc->documentElement(); 

{ 
    my $xpc = XML::LibXML::XPathContext->new($doc); 
    say "doc:"; 
    say $_->nodeName for $xpc->findnodes('foo:bar'); 
} 

say ""; 

{ 
    my $xpc = XML::LibXML::XPathContext->new($root); 
    say "root:"; 
    say $_->nodeName for $xpc->findnodes('foo:bar'); 
} 

doc: 

root: 
foo:bar