我试图用“getElementsByTagName”来做,但是它不起作用,我是新手使用DOMDocument解析HTML,因为我曾经使用正则表达式,直到昨天在这里有一些类型的fokes告诉我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>
答案 0 :(得分:51)
如果你想获得:
<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)
答案 1 :(得分:1)
您可以使用http://simplehtmldom.sourceforge.net/
使用php编写的DOM解析器非常简单易用,您可以通过它轻松获取div标签的内容。
这样的事情:
// Find all <div> which have attribute id=text
$ret = $html->find('div[id=text]');
请参阅其文档以获取更多帮助。