从字符串中提取DOM元素,使用PHP

16

可能的重复问题:
使用PHP爬取HTML页面?
解析HTML的最佳方法

我在我的php脚本中有一个字符串变量,其中包含html页面。 我怎样才能从这个字符串中提取DOM元素?

例如,在此字符串'<div class="someclass">text</div>'中,我希望获取变量“text”。 我该如何做到这一点?


(相关) 解析HTML的最佳方法 - Gordon
2个回答

32
你需要使用DOMDocument类,更具体地说,是它的loadHTML方法,将你的HTML字符串加载到一个DOM对象中。
例如:
$string = <<<HTML
<p>test</p>
<div class="someclass">text</div>
<p>another</p>
HTML;

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

之后,您将能够操作DOM,例如使用[**`DOMXPath`**][3]类对其进行XPath查询。
例如,在您的情况下,您可以使用基于以下代码片段的内容:
$xpath = new DOMXpath($dom);
$result = $xpath->query('//div[@class="someclass"]');
if ($result->length > 0) {
    var_dump($result->item(0)->nodeValue);
}

这里,你将得到以下输出内容:
string 'text' (length=4)

作为一种替代方案,你可以使用`simplexml_load_string`和`SimpleXMLElement::xpath`,而不是`DOMDocument`。但是对于复杂的操作,我通常更喜欢使用`DOMDocument`。

1
@Gordon 完成了(是的,这有点多次重复) - Pascal MARTIN
DOMDocument 有多快? - Jovanni G

5

了解一下DOMDocumentDOMXPath

$DOM = new DOMDocument();
$DOM->loadHTML($str);

$xpath = new DOMXPath($DOM);
$someclass_elements = $xpath->query('//[@class = "someclass"]');
// ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接