XML :: LibXML与多个名称空间匹配

时间:2018-01-22 12:23:39

标签: excel perl xml-parsing

我有一个包含以下内容的example.xml文件:

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<Worksheet ss:Name="Master Sheet">
</Worksheet>
</Workbook>

我有以下Perl代码来解析该文件:

use strict;
use warnings 'all';
use XML::LibXML;
my $filename = 'example.xml';
my $dom = XML::LibXML->load_xml(location => $filename);
my $xpc = XML::LibXML::XPathContext->new($dom);
$xpc->registerNs('ss', 'urn:schemas-microsoft-com:office:spreadsheet');
my $match1 = $xpc->findnodes('//Worksheet/ss:Name');
print "XPath $match1\n";

我已经尝试了很多变体的参数来提取字符串&#34; Master Sheet&#34;,但无济于事。有人可以建议吗?

1 个答案:

答案 0 :(得分:2)

默认名称空间与ss完全相同,因此可以使用

$xpc->findnodes('/ss:Worksheet/@ss:Name')