私は「getElementsByTagName」でそれをやろうとしていましたが、うまくいきませんでした。昨日、ここのある種の偽物がDOMEDocumentの方が優れていると言われるまで正規表現を使用していたので、DOMDocumentを使用してHTMLを解析するのは初めてです。仕事なので、私はそれを試してみる:)
私はしばらくの間グーグルでいくつかの説明を探しましたが、役立つものは何も見つかりませんでした(とにかくクラスで)
「Capture this text 1」や「Capture this text 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>
取得したい場合:
<div>
を含むclass="text"
タグ内にあります<div>
とclass="main"
の中にあります最も簡単な方法は DOMDocument::getElementsByTagName
-を使用しないことです。これは、特定の名前(そのうちの一部のみが必要な場合)。
代わりに、 DOMXpath
クラスを使用して、ドキュメントでXPathクエリを使用します。
たとえば、HTML文字列をDOMオブジェクトにロードし、DOMXpath
クラスをインスタンス化するには、次のようにする必要があります。
$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)
http://simplehtmldom.sourceforge.net/ を使用できます
非常にシンプルで使いやすいphpで記述されたDOMパーサーを使用すると、divタグのコンテンツを簡単に取得できます。
このようなもの:
// Find all <div> which have attribute id=text
$ret = $html->find('div[id=text]');
詳細については、ドキュメントを参照してください。