我正在使用 PHP 来检索给定 URL 和 XPATH 的内容。我使用 DOMDocument / DOMXPath (带有查询或评估)。
对于小的 xpath,我得到了正确的结果,但对于更长的 xpath,它不起作用。(而且这个 xpath 似乎很好(我用 Xpather(firefox 插件)获得它们并用 YQL 重新测试它们)。
你对这个奇怪的麻烦有什么建议吗?
代码示例:
$doc = new DOMDocument();
$myXMLString = file_get_contents('http://stackoverflow.com/questions/4097230/too-long-xpath-with-domxpath-query-evaluate-return-nothing');
@$doc->loadHTML($myXMLString); //@ to suppress warnings
//(good for not ending markup)
$xpath = new DOMXPath($doc);
$fullPath ="/html/body/small/path"; //it works
//$fullPath = "/html/body/full/path/with/lot/of/markup";//does not works
$entries = $xpath->query($fullPath);
//or ->evalutate($fullPath) (same behaviour)
//$entries return DOMNodeList (empty for a long path query,
// correct for a small path query)
我用属性限制进行测试,但似乎没有改变(使用小的 xpath 它可以工作,更长的时间它不能工作更多)
示例:对于当前页面:
$fullPath = "/html
/body
/div[4]
/div[@id='content']
/div[@id='question-header']
/h1
/a";//works (retrieve the question title)
$fullPath = "/html
/body
/div[4]
/div[@id='content']
/div[@id='mainbar']
/div[@id='question']
/table
/tbody
/tr[2]
/td[2]
/div[@id='comments-4097230']
/table
/tbody
/tr[@id='comment-4408626']
/td[2]
/div
/a"; //does'nt work
//(should retrieve 'gaby' from comment)
编辑:
我使用 SimpleXML lib 进行测试,我的行为完全相同(小查询的结果很好,长查询没有结果)。
编辑2:
我还通过删除一些第一个元素来剪切最长的 xpath,它可以工作。顺便说一句,我真的不明白为什么完全正确的 xpath 不起作用。