我试图用“getElementsByTagName”来做这件事,但它没有用,我是使用 DOMDocument 解析 HTML 的新手,因为直到昨天我才使用正则表达式,这里有些人告诉我 DOMEDocument 会是更适合这份工作,所以我正在尝试 :)
我在谷歌上搜索了一段时间,寻找一些解释,但没有找到任何有用的东西(反正对类没有帮助)
所以我要抓取“抓取这段文字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>
最佳答案
如果你想得到:
- 正文
- 在
<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);
然后,您可以使用 XPath 查询,使用 DOMXPath::query
方法,返回您正在搜索的元素列表:
$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)
关于php - 使用 PHP 的 HTML DOMDocument 解析 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571232/