Я пытаюсь заставить XPath вернуть значение атрибута, но сначала искать содержимое тега, т. Е. Если у меня есть
<select name="xxx">
<option=bla>123</option>
<option=blubb>456</option>
</select>
Я хочу сказать, "поиск тега опции, содержащего 456 внутриопределенный тег выбора с именем "xxx".
Я делаю это:
my $xp = XML::XPathEngine->new();
my $tree = HTML::TreeBuilder::XPath->new_from_content($mech->content);
my $search = $xp->find('//select[@name="xxx"]/option[.=~ /' . $re . '/]/@value', $tree);
($ re является регулярным выражением для части опции.)
Все, что возвращаетсяв последней строке ($ xp-> find) указано
Can't locate object method "getRootNode" via package "HTML::TreeBuilder::XPath::Attribute" at /usr/lib/perl5/site_perl/5.8.8/XML/XPathEngine/NodeSet.pm line 90, <MYFILE> line 1.
Что здесь не так? Этот модуль неисправен? Мой XPath неисправен? Должен ли я использовать что-то еще, что «просто работает»?
PS. Я не использую XML :: Parser, потому что он жалуется на совершенно корректную страницу
mismatched tag at line 9, column 3, byte 427 at /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi/XML/Parser.pm line 187
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>aaaa</title>
<link href="/x/include/main.css" type="text/css" rel="stylesheet">
<link href="/x/images/favicon.ico" rel="shortcut icon">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script type="text/javascript" src="/x/include/layout.js"></script>
</head>
<body style=
.....