XPath test #3
コメントノード、怪しくなかった。TreeBuilderのstore_comments呼んでなかっただけ。pi系の関数はたぶん実装されてないだけなんじゃないだろうか。descendantはやっぱりあやしいのかも。substringの引数は文字列しか想定してないとみた。
substringの二番目の引数で示される開始位置が文字列より長いとperlのsubstrが文句言ってる。でもXML Path Language (XPath)にもその場合について書いてない。Firefoxの実装は空文字列返してるけど。
descendantはバグだ。axisが逆になってるみたい。
逆にいえばほかはみんなamachangのテストを通る。使い方が間違ってただけでHTML::TreeBuilder::XPathはかなりいい(んだと思う。あとでためそっと)。
*ng .//blockquote/descendant::* expected: ins result : br p del ins font *ng (.//blockquote/descendant::*) expected: ins result : br p del ins font *ng (.//blockquote/descendant::*)[4] expected: ins result : p
my $tree = HTML::TreeBuilder::XPath->new; $tree->store_comments(1); $tree->store_pis(1); $tree->parse($html);
めちゃくちゃだけどこれでok.
my $literal; if ( $results->isa('XML::XPathEngine::Number') ) { $literal = $results->string_value; } elsif ( $results->isa('XML::XPathEngine::Literal') ) { $literal = $results->string_value; } else { $literal = eval { join " ", map { $lastOne = $_ ; if ( $_->isa('HTML::TreeBuilder::XPath::TextNode') ) { 't:' . $_->getValue; } elsif ($_->isa('HTML::Element') ) { if ( $_->isCommentNode ) { 'c:' . $_->{text}; } elsif ( $_->isProcessingInstructionNode ){ 'p:' . substr($_->tag, 1); } else { $_->tag; } } else { die; } } @$results; }; }
*ng .//blockquote/processing-instruction() expected: p:pi result : *ng .//blockquote/processing-instruction("pi") expected: p:pi result : *ng .//blockquote/descendant::*[position() < 4] expected: br p del result : br del ins *xpath evaluation failed. id(.//font/@face) Can't locate object method "look_down" via package "HTML::TreeBuilder::XPath::Attribute" at /Library/Perl/5.8.6/HTML/TreeBuilder/XPath.pm line 34. *ng .//blockquote/descendant::*[4] expected: ins result : p *ng .//blockquote/descendant-or-self::*[4] expected: del result : p *ng .//blockquote/preceding::*[4] expected: strong result : h1 *xpath evaluation failed. .//*[substring(.,2,1) = "u"] substr outside of string at /Library/Perl/5.8.6/XML/XPathEngine/Function.pm line 248. *xpath evaluation failed. .//*[substring(.,2) = "up"] substr outside of string at /Library/Perl/5.8.6/XML/XPathEngine/Function.pm line 251. *xpath evaluation failed. .//*[lang("it")] axis axis_attribute not implemented [Can't locate object method "getNamespace" via package "HTML::TreeBuilder::XPath::Attribute" at /Library/Perl/5.8.6/XML/XPathEngine.pm line 182. ]