1

のみを使用して、タグ間のコンテンツを取得してエコーすることは可能PHPですか?

例えば。これが次の場合HTML:

<td class="header subject">Text</td>

Textタグの内側からどのように取得できますechoか?

私はこれがうまくいくと思った:

<? 
preg_match("'<td class=\"header subject\">(.*?)</td>'si", $source, $match);
if($match) echo "result=".$match[1];
?>

ただし、$source変数はページ全体でなければなりません。

注: クラスのインスタンスは 1 つしかheader subjectないため、タグが複数あっても問題はありません。

4

2 に答える 2

2

DOMDocumentクラスを使用してテキストを解析しtextContent、要素の を取得する必要があります。

$html = '<td class="header subject">Text</td>';

$dom = new DOMDocument();
$dom->loadHTML( $html );

// Text
echo $dom->getElementsByTagName("td")->item(0)->textContent;

または、多くの要素を循環しtdて、クラス値を持つ要素のテキストのみを表示する必要がある"header subject"場合は、次のようにすることができます。

$tds = $dom->getElementsByTagName("td");

for ( $i = 0; $i < $tds->length; $i++ ) {
  $currentTD = $tds->item($i);
  $classAttr = $currentTD->attributes->getNamedItem("class");
  if ( $classAttr && $classAttr->nodeValue === "header subject" ) {
    echo $currentTD->textContent;
  }
}

デモ: http://codepad.org/o1xqrnRS

于 2012-05-13T05:06:26.343 に答える
1

問題がページの解釈方法がわからないことが原因であると仮定すると、次のことを試してください。

<?php 
$lines = file("/path/to/file.html");
foreach($lines as $i => $line)
{
   if (preg_match("'<td class=\"header subject\">(.*?)</td>'si", $line, $match))
   {
      echo "result=". $match[$i];
   }
}
?>
于 2012-05-13T05:02:06.177 に答える