2017-04-21 17 views
0

私は、HTMLページからすべて<td>タグを選び出すためにいくつかのコードを使用しています:PHPのDOMトラバースHTMLノードと子ノード

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('td') as $node) { 
$array_data[ ] = $node->nodeValue; 
} 

これは私の配列のデータの罰金を格納します。

HTMLデータは、ATが見ている:

<tr> 
<td>DATA 1</td> 
<td><a href="12345">DATA 2</a></td> 
<td>DATA 3</td> 
</tr> 

$array_data戻り値:

Array([0])=>DATA 1 [1]=>DATA 2 [2]=> DATA 3) 

マイ所望の出力がページに関連付けられている<a>タグからコードを取得することです。所望の出力:

Array([0])=>DATA 1 [1]=>12345 [2]=>DATA 2 [3]=> DATA 3)

私は<a>は、子ノードと呼ばれると思う、これは愚かな質問と思われる場合、私は申し訳ありませんDOMでの作業に非常に新しいです。

私はSOのリンク読んだことがある:私はHREFを選び出すために、このコードを使用しました Using PHP dom to get child elements

を:他の読み物のための

foreach ($dom->getElementsByTagName('td') as $node) { 
     foreach ($node->getElementsByTagName('a') as $node){ 
     $link = $node->getAttribute('href'); 
     echo '<br>'; 
     echo $link; 
     } 
     $array_data[ ] = $node->nodeValue; 
    } 

すべてのヘルプやポインタを大幅にappreicatedされます!
ありがとう

+0

を参照してください。私はあなたの問題を解決するための答えを投稿しました。それであなたはなぜ質問を変えたのですか?あなたの問題は何ですか? – Mohammad

+0

あなたの解決策Mohammedに感謝します。私は同時に解決策を見つけるために他のSOの投稿を読んでいました。私がSOの投稿で何かを見つけたら、私は自分の質問に更新されたコードを投稿しました。 – Jeanclaude

答えて

0

tdにはaがあることを確認してください。 getElementsByTagName()を使用してアンカータグを選択し、選択内容にlengthプロパティを使用してコンテンツがあることを確認します。 tdに子のアンカーがある場合は、を使用してhrefの属性を取得します。

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('td') as $node) { 
    $nodeAnchor = $node->getElementsByTagName("a"); 
    if ($nodeAnchor->length) 
     $array_data[] = $nodeAnchor->item(0)->getAttribute("href"); 
    $array_data[] = $node->nodeValue; 
} 

demo

関連する問題