почему эти промежутки не обрабатываются как узлы domdocument ()? - PullRequest
0 голосов
/ 31 августа 2011

результат следующего вызова 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("");
print_r($titles);
echo("
"); ?>

есть

Array
(
    [0] =>  
                  INFOMore InfoEtc. 

)

Почему данные в этих двух интервалах внутри элемента a включаются в результат, если я не указываю эти интервалы в пути? Меня интересует только получение данных, содержащихся непосредственно в элементе a, а не информации, содержащейся в промежутках внутри элемента a. Мне интересно, что я делаю не так.

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Попробуйте этот xpath:

//div[@class="list_item"]/div[@class="list_item_content"]/div[@class="list_item_title"]/a/child::text()
1 голос
/ 31 августа 2011

Узлы есть, но просматривают их в режиме HTML в браузере.Попробуйте просмотреть источник страницы и / или выполните:

<code>echo("<pre>");
htmlspecialchars(print_r($titles), true);
echo("
");

вместо этого, который закодирует <> в &lt;&gt; и сделает их« видимыми ».

...