【问题标题】:php - loadHTML() - every <p> until a certain classphp - loadHTML() - 每个 <p> 直到某个类
【发布时间】:2018-04-09 20:15:51
【问题描述】:

我以两种不同的方式称呼一些维基百科内容:

$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 或类“toc”之前调用所有 &lt;p&gt;,这是目录的 id/类。

知道怎么做吗?

【问题讨论】:

  • 所以你想要所有的段落文本直到(但不包括)目录对吗?
  • @viney 是的

标签: php html domdocument paragraph


【解决方案1】:

如果您只是在寻找纯文本的介绍,您可以简单地使用 Wikipedia 的 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

【讨论】:

    【解决方案2】:

    您可以将DOMDocumentDOMXPath 与例如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 之前段落的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多