【问题标题】:Looping Through Multiple HTML Elements with DOMDocument使用 DOMDocument 循环遍历多个 HTML 元素
【发布时间】:2012-05-14 13:31:08
【问题描述】:

我的页面看起来像这样:

...
<div class="container">

<div class="info">
<h3>Info 1</h3>
<span class="title">Title for Info 1</span>
<a href="http://www.example.com/1">Link to Example 1</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 2</h3>
<span class="title">Title for Info 2</span>
<a href="http://www.example.com/2">Link to Example 2</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 3</h3>
<span class="title">Title for Info 3</span>
<a href="http://www.example.com/3">Link to Example 3</a>
</div> <!-- /info -->

</div> <!-- /container -->
...

每个 info 类 div 的结构都是相同的,我希望能够循环遍历文档,并为每个带有 info 类的 div,将各种组件解析为数组或单个变量用于以某种人类可读的格式输出数据,例如 csv 文件或 HTML 表格。

我试过使用 DOMDocument 方法,并使用 getElementByTagName 来提取每个标签的内容,但是由于 div 包含多种标签类型(h3、a、span),我还没有弄清楚如何完成我的工作正在寻找。

最后,我希望能够以这样的格式放置数据:

divclass, h3, spanclass, spantitle, ahref, a
info, Info 1, title, Title for Info 1, http://www.example.com/1, Link to Example 1
...

谢谢!

【问题讨论】:

  • 您是否尝试过使用 Simple HTML Dom Parser 之类的库?

标签: php domdocument


【解决方案1】:
<?php
$html = '
<div class="container">

<div class="info">
<h3>Info 1</h3>
<span class="title">Title for Info 1</span>
<a href="http://www.example.com/1">Link to Example 1</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 2</h3>
<span class="title">Title for Info 2</span>
<a href="http://www.example.com/2">Link to Example 2</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 3</h3>
<span class="title">Title for Info 3</span>
<a href="http://www.example.com/3">Link to Example 3</a>
</div> <!-- /info -->

</div> <!-- /container -->
';


$dom_document = new DOMDocument();

$dom_document->loadHTML($html);
$dom_document->preserveWhiteSpace = false;

//use DOMXpath to navigate the html with the DOM
$dom_xpath = new DOMXpath($dom_document);

$elements = $dom_xpath->query("//*[@class='info']");

if (!is_null($elements)) {

  foreach ($elements as $element) {
    echo "\n[". $element->nodeName. "]";

    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "\n";
    }

  }
}

【讨论】:

  • 非常感谢——这很有帮助。我仍然无法弄清楚的唯一一件事是如何从 a 标签中提取 href 值。我尝试了一些类似的变体,但无济于事:if ($node-&gt;nodeName = "a") {echo $node-&gt;getAttribute('href');}
  • 没关系——我的用户错误。这是其他人的工作版本:echo $node-&gt;getAttribute( 'href' );
猜你喜欢
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多