为什么这些跨度不会被domdocument()视为节点?

时间:2011-08-31 19:39:00

标签: php domdocument

以下domdocument()调用的结果

$html = <<<EOT
<div class="list_item"> 
         <div class="list_item_content"> 

            <div class="list_item_title"> 
               <a href="/link/goes/here"> 
                  INFO<br /> 
                  <span class="part2">More Info</span><br /> 
                  <span class="part3">Etc.</span> 
               </a> 
            </div> 

      </div> 
EOT;

libxml_use_internal_errors(false);

$dom = new DOMDocument();
$dom->loadhtml($html);
$xpath = new DOMXPath($dom);

$titles_nodeList = $xpath->query('//div[@class="list_item"]/div[@class="list_item_content"]/div[@class="list_item_title"]/a');

foreach ($titles_nodeList as $title) {
    $titles[] = $title->nodeValue;
}

echo("<pre>");
print_r($titles);
echo("</pre>");


?>

Array
(
    [0] =>  
                  INFOMore InfoEtc. 

)

当我没有在路径中指定这些跨度时,为什么结果中包含这两个跨度中的数据?我只对直接检索a元素中包含的数据感兴趣,而不是对元素内部的spans中包含的信息感兴趣。我想知道我做错了什么。

2 个答案:

答案 0 :(得分:1)

节点在那里,但是在浏览器中以HTML模式查看它们。尝试查看页面源,和/或执行:

echo("<pre>");
htmlspecialchars(print_r($titles), true);
echo("</pre>");
相反,它会将<>编码为&lt;&gt;并使其“可见”。

答案 1 :(得分:1)

试试这个xpath:

//div[@class="list_item"]/div[@class="list_item_content"]/div[@class="list_item_title"]/a/child::text()