22

私は「getElementsByTagName」でそれをやろうとしていましたが、うまくいきませんでした。昨日まで正規表現を使用していたので、DOMDocumentを使用してHTMLを解析するのは初めてです。仕事なので、試してみます:)

私はしばらくの間グーグルで説明を探しましたが、助けになるものは何も見つかりませんでした(とにかくクラスではありません)

そこで、「このテキストをキャプチャ1」や「このテキスト2をキャプチャ」などをキャプチャしたいと思います。

一生懸命に見えませんが、私はそれを理解することはできません:(

<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>
4

2 に答える 2

54

あなたが取得したい場合:

  • テキスト
  • それは<div>タグの中にありますclass="text"
  • それ自体<div>class="main"

最も簡単な方法は、使用しないことです。DOMDocument::getElementsByTagNameこれにより、特定の名前を持つすべてのタグが返されます(一部のタグのみが必要です)

代わりに、クラスを使用して、ドキュメントでXPathクエリを使用しますDOMXpath


DOMXpathたとえば、HTML文字列をDOMオブジェクトにロードし、クラス をインスタンス化するには、次のようにする必要があります。

$html = <<<HTML
<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>
HTML;

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

$xpath = new DOMXPath($dom);


DOMXPath::query次に、検索した要素のリストを返すメソッド を使用して、XPathクエリを使用できます。

$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
    var_dump(trim($tag->nodeValue));
}


これを実行すると、次の出力が得られます。

string 'Capture this text 1' (length=19)
string 'Capture this text 2' (length=19)
于 2010-04-03T12:28:30.607 に答える
1

http://simplehtmldom.sourceforge.net/を使用できます

phpで記述された非常にシンプルで使いやすいDOMパーサーで、divタグのコンテンツを簡単にフェッチできます。

このようなもの:

// Find all <div> which have attribute id=text
$ret = $html->find('div[id=text]'); 

詳細については、ドキュメントを参照してください。

于 2014-03-12T08:16:49.270 に答える