小编dga*_*ate的帖子

XML::LibXML findnodes() 在 xmlns 存在时不返回结果

我正在使用 XML::LibXML::Reader 来解析一个大文档,但遇到了一个问题,即属性 xmlns 导致 findnodes() 失败。我通过添加正则表达式来删除 xmls 属性来修复它,但我想知道是否有更优雅的解决方案不涉及正则表达式。如果您删除正则表达式行 ($xml =~ s{xmlns...),您将看到“Loc = $loc”不会产生任何结果。

这是代码:

use strict;
use warnings;
use feature qw( say );
use XML::LibXML::Reader qw( XML_READER_TYPE_ELEMENT );

my $xml = <<'__EOI__';
<url xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <loc>http://example.com</loc>
    <lastmod>2018-10-19</lastmod>
</url>
__EOI__


$xml =~ s{xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"}{};

my $reader = XML::LibXML::Reader->new( string => $xml);
while ( $reader->read ) {
    next unless $reader->nodeType == XML_READER_TYPE_ELEMENT;
    next unless $reader->name eq 'url';
    my $xml = $reader->readOuterXml;
    my $doc = XML::LibXML->load_xml(string => $xml);
    say "Doc = $doc";
    my ($loc) …
Run Code Online (Sandbox Code Playgroud)

perl xml-libxml

1
推荐指数
1
解决办法
748
查看次数

标签 统计

perl ×1

xml-libxml ×1