2015-09-04 5 views
1

У меня есть этот HTML-скрипт:Simple HTML DOM Parser - найти класс внутри другого класса

<div class="find-this">I do not need this</div> 

<div class="content"> 
    <div class="find-this">I need this</div> 
</div> 
<div class="content"> 
    <div class="find-this">I need this</div> 
    <div class="find-this">I need this as well</div> 
</div> 

До сих пор у меня есть это:

foreach($html->find('div[class=content]') as $key => $element) : 
     $result = $html->find('div[class=find-this]', $key)->innertext; 
     echo $result; 
endforeach; 

Как найти find-this класс, который находится внутри класс content, а не тот, который выше, не зная, сколько из них находится внутри необходимого класса и сколько из них находится снаружи? Спасибо.

ответ

1

XPath может быть тем, что вы ищете. С помощью этого кода вы получаете только три узла, которые вам нужны.

/* Creates a new DomDocument object */ 
$dom = new DomDocument; 
/* Load the HTML */ 
$dom->loadHTMLFile("test.html"); 
/* Create a new XPath object */ 
$xpath = new DomXPath($dom); 
/* Query all <divs> with the class name */ 
$nodes = $xpath->query("//div[@class='content']//div[@class='find-this']"); 
/* Set HTTP response header to plain text for debugging output */ 
header("Content-type: text/plain"); 
/* Traverse the DOMNodeList object to output each DomNode's nodeValue */ 
foreach ($nodes as $i => $node) { 
    echo "Node($i): ", $node->nodeValue, "\n"; 
} 

Примечание: Я основывал свой ответ на this other related answer.

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