【问题标题】:XML::LibXML: doc - rootXML::LibXML: 文档 - 根
【发布时间】:2013-07-20 09:19:41
【问题描述】:

第一个例子中documentElemtent的调用是多余的吗?

#!/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

【问题讨论】:

  • 根节点上是否声明了命名空间可能很重要。

标签: xml perl xml-parsing xml-libxml


【解决方案1】:

主题节点中定义的任何前缀都是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2015-02-04
    • 2021-02-26
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多