php - loadHTML() - 每 <p> 直到某个 class

php - loadHTML() - every <p> until a certain class

我用两种不同的方式调用一些维基百科内容:

$html = file_get_contents('https://en.wikipedia.org/wiki/Sans-serif');

第一个叫第一段

$dom = new DomDocument();
@$dom->loadHTML($html);
$p = $dom->getElementsByTagName('p')->item(0)->nodeValue;
echo $p;

第二种是在特定的$id之后调用第一段

$dom = new DOMDocument();
@$dom->loadHTML($html);
$p=$dom->getElementById('$id')->getElementsByTagName('p')->item(0);
echo $p->nodeValue;

我正在寻找第三种方式来调用所有第一部分。 所以我在考虑调用id之前的所有<p>或者class"toc"也就是内容table的id/class

知道怎么做吗?

如果您只是在寻找纯文本的介绍,您可以简单地使用维基百科的 API:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=Sans-serif

如果您还想要 HTML 格式(不包括内部图像等):

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&titles=Sans-serif

您可以将 DOMDocument and DOMXPath 与例如 xpath 表达式一起使用,例如:

//div[@id="toc"]/preceding-sibling::p

$doc = new DOMDocument();
$doc->load("https://en.wikipedia.org/wiki/Sans-serif");
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//div[@id="toc"]/preceding-sibling::p');

foreach ($nodes as $node) {
    echo $node->nodeValue;
}

这将为您提供 ID = toc.div 之前段落的内容。