Простое создание объекта XML::LibXML:XPathContext
ничего не изменит, вам также необходимо зарегистрировать все пространства имен, которые вы хотите использовать в выражениях XPath. В этом случае вы использовали пространство имен ns2
вообще без регистрации каких-либо пространств имен.
Ваш код должен выглядеть примерно так
my $xml = XML::LibXML->new->parse_file("$tmp_dir/xml/$xml_file_name");
my $xc = XML::LibXML::XPathContext->new($xml);
$xc->RegisterNs( ns2 => 'http://example.com/ns2/uri/address');
my $val = $xc->findvalue('/ns2:export/ns2:bankGuarantee/docPublishDate');
print $val;
Обратите внимание, что URI, который вы регистрируете, должен совпадать с URI в
xmlns:ns2="http://example.com/ns2/uri/address"
атрибут в данных
Мне интересно, является ли опция парсера clean_namespaces
вашей попыткой исправить это? clean_namespaces
удалит только избыточные пространства имен, то есть те, которые нигде не используются в XML-документе. В этом мало смысла, так как у вас мало шансов столкнуться с конфликтом пространств имен, а сэкономленное время и память будут незначительными.
person
Borodin
schedule
29.08.2015