2013-08-17 3 views
1

Я хочу использовать XPATH запрос для получения «Тестирования» только один раз, в следующем test.htmlXPath запрос: только получить значение внука

<html> 
    <body> 
     <div class="test1"></div> 
     <div class="test2"> 
      <div><strong>Testing</strong></div> 
     </div> 
    </body> 
</html> 

Вот код PHP я использовал для извлечения содержимого ,

$uri='test.html'; 
$doc = new DOMDocument('1.0','utf-8'); 
$doc->loadHTMLFile($uri); 
$xpath= new DOMXPath($doc); 
$path="/html/body/div[2]//*"; 
$elements = $xpath->query($path); 

if(!is_null($elements)){ 
    foreach($elements as $element){ 
     echo '<br>['.$element->nodeName.']'; 
     $nodes = $element->childNodes; 
     foreach($nodes as $node){ 
      $nodeValue=$node->nodeValue; 
      echo $nodeValue; 
     } 
    } 
} 

Вот результат, который я получил.

Почему он печатает «Тестирование» даже в узле [div]? Я хочу, чтобы он только извлекал «Тестирование», когда он находится в [сильном] узле.

+0

Поскольку внук будет '/./.,' '// * == любого ребенка на любой глубине. – Wrikken

ответ

0

Вот как это работает - nodeValue родительского узла всегда будет содержать nodeValue s его детей.

nodeValue не подходит для вашей цели. Вместо этого вы должны получать текстовые узлы среди своих детей. См. Этот вопрос: Getting node's text in PHP DOM.

0

Ваш XPath /html/body/div[2]//* возвращает всех потомков div[2], включая узлы детей и внуков.

Чтобы получить только внуки использовать /html/body/div[2]/*/*

Смежные вопросы