Perl XML:: LibXML: findnode против findvalue против find - в чем разница?
я использую XML::LibXML, и мне просто нужно получить количество узлов, указанных выражением XPath.
использование любой из первых двух строк кода ниже дает то, что я ищу. Я могу использовать count функция XPath с findvalue или find а не findnodes (да, я знаю, потому что он возвращает список).
my $node_cnt = $dom->findvalue("count($xpath_str)"); # WORKS!
my $node_cnt = $dom->find("count($xpath_str)"); # WORKS!
my @node_cnt = $dom->findnodes("count($xpath_str)"); # count doesn't work!
что приводит меня к общему придирчивому вопросу: Какая разница между этими тремя!--5--> типы? В документация, в ней говорится:
$string = $node->findvalue($xpath)
$result = $node->find($xpath)
@nodes = $node->findnodes($xpath_expression)
действительно ли есть разница между аргументом
$xpath_expressionи просто$xpathв документации?для двух, возвращающих скаляр, какая разница?
Я пытаюсь понять значение использования одного типа поиска над другим-Спасибо!
1 ответов
разница-это тип значения, которое возвращают методы.
-
findnodesиспользуется для получения списка узлов. Если метод вызывается в контексте списка он возвращает список объектов соответствующего типа, таких какXML::LibXML::Element,XML::LibXML::Textetc. Если он вызывается в скалярном контексте, то он возвращает singleXML::LibXML::NodeListобъект, содержащий ту же информацию.это не может используется для возврата произвольного выражения, для пример
$dom->findnodes('42')ничего не вернуть. Из этого метода можно получить только узлы документа списка. findvalueиспользуется для возврата одного текста или цифры стоимостью, т. е. не узел XML. Если передать выражение XPath, которое вычисляется в список узлов, он преобразует этот список в текст путем объединения всех текстовых узлов в любом из узлов в списке.-
findможет вернуть что угодно. Он вернет узел список как в выражении, которое оценивается в список узлов, то есть смутно разумный способ преобразования в текстовое значение иfindvalueделает все возможное и возвращает конкатенацию всех текстовых узлов, содержащихся узлов в списке.