【发布时间】:2017-06-15 13:19:43
【问题描述】:
有这样的 XML 文件 - t.xml
<?xml version="1.0"?>
<ArrayOfFiles xmlns="Our.Files" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<File>
<DownloadCount>1</DownloadCount>
<Id>11</Id>
</File>
<File>
<DownloadCount>2</DownloadCount>
<Id>22</Id>
</File>
</ArrayOfFiles>
xmlns 声明无效,xmlstarlet 抱怨它,例如使用:
xmlstarlet sel -t -v "//File/Id" t.xml
打印
t.xml:2.32: xmlns: URI Our.Files is not absolute
<ArrayOfFiles xmlns="Our.Files" xmlns:i="http://www.w3.org/2001/XMLSchema-instan
可能出于同样的原因,我也无法使用以下 perl 代码:
use 5.014;
use warnings;
use XML::LibXML;
my $dom = XML::LibXML->new->parse_file('t.xml');
my $res = $dom->findnodes('//File/Id');
say $_->textContent for $res->get_nodelist;
当我省略 xmlns 声明时,例如试图解析这个修改过的 XML 文件
<?xml version="1.0"?>
<ArrayOfFiles>
<File>
<DownloadCount>1</DownloadCount>
<Id>11</Id>
</File>
<File>
<DownloadCount>2</DownloadCount>
<Id>22</Id>
</File>
</ArrayOfFiles>
上面的代码DWIM - 并打印:
11
22
问题是,如何解析原始 XML 文件,因为它是从外部站点下载的 - 所以我必须稍微处理一下......
【问题讨论】:
标签: perl libxml2 xml-libxml