Пространства имен в XML — это своего рода параллельное измерение. Есть вложенность тегов, есть атрибуты, а есть пространства имен, которые могут перенести фрагмент XML в другое пространство и даже сделать его таким образом невидимым для парсеров:
<date timestamp="200911032358">
<invisible:service name="rating"/>
</date>
При работе с таким XML через XML::LibXML важно не забывать, что для того, чтобы добраться до узла с пространством имен, отличной от той, что используется во всем документе, требуется создать контекст, а затем уже с его помощью выбирать нужные узлы:
my $context = new XML::LibXML::XPathContext;
$context->registerNs('yablogs', 'urn:yandex-blogs');
my @codeNodes = $context->findnodes("yablogs:$nodeName/text()", $node);
Код использован в бою на сервисе рейтинга русских блогов.
Комментировать