2014-04-02 31 views
-1

我認爲這是一個簡單的問題,但我不能排序它,我試圖用簡單的PHP DOM解析器得到所有標題標籤,我的代碼只有一種方式,例如php DOM解析器返回父母和子女

$heading['h2']=$html->find('h2 a');//works fine 

我發現一些網站包裹h2的標籤中這樣

<a href='#'><h2> my heading</h2></a> 

問題是試圖讓這兩個標籤,以便我可以顯示它的鏈接。所以,當我做到這一點

$heading['h2']=$html->find('a h2'); 

我得到h2不錯,但它不會環繞它的鏈接標籤,這當然是有道理的,發現是a孩子們都H2標籤,但我怎麼得到整個父標籤,我希望是有道理的,我想這回是什麼

<a href="#"><h2>My Headings</h2></a> 

然後我可以只打印輸出與

echo $headings['h2']; //and the link with be there 
+0

您需要將此短語作爲一個問題。例如,你的問題可能是:我如何找到所有從'a'下降的'h2'? – pguardiario

回答

0

如果<a href="[..]"> IST只是外部因素,你可以做這樣的:

$heading['h2']=$html->find('a h2'); 
foreach ($heading['h2'] as $h2) { 
    echo $h2->parent(), "\n"; 
} 

你也可以上去DOM樹,直到你達到一個<a>標籤:

$heading['h2']=$html->find('a h2'); 
foreach ($heading['h2'] as $h2) { 
    $a = $h2; 
    while ($a && $a->tag != "h2") $a = $a->parent(); 
    if (!$a) continue; // no <a> above <h2> 
    echo $a, "\n"; 
} 
+0

謝謝你這個工作回聲$ h2->父(),似乎很簡單,當你顯示 – user1899802

0

那麼我首先想到的是我們使用

$html->find('a'); 

但我猜你的網頁上有多個鏈接。所以,正確的做法將被使用一個ID(或類),以確定您的鏈接

<a href='#' id="titleLink"><h2> my heading</h2></a> 

,然後搜索特定ID:

$html->find('a#titleLink'); 

我不知道你的庫'使用和支持什麼語法,但是我希望你能明白這個主意。

+0

是的,這將是理想的,但我不知道我的網頁將被饋送的網址,所以它不可能知道什麼是id,我想我可以分配一個,但給我需要得到所有的標題,即h1, - h6它可能有點麻煩,但我會給它一些想法,謝謝你親切 – user1899802

0

根據到文檔:$heading['h2']=$html->find('a > h2')->parent();將返回包裝h2的錨標籤,但是如果在頁面中有多個'a> h2',則find函數將返回一個數組,因此請嘗試使用和/或使用foreach。

+0

這是完全有道理,但由於某種原因,它doesn沒有工作,也許我犯了一個錯誤,但謝謝你,我會繼續玩它 – user1899802

0
$info = $html->find('a,h2'); 

echo '<a href='.$info[0]->href.'>'.$info[1]->innertext.'</a>';