22

我试图用“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>
4

2 回答 2

54

如果你想得到:

  • 文本
  • 那在一个<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)
于 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 回答