【问题标题】:Loop through <div> elements using PHP使用 PHP 循环遍历 <div> 元素
【发布时间】:2010-01-18 21:13:13
【问题描述】:

我在一个字符串中有一个 html 块,它基本上是一个 div 列表...每个 div 里面都有我想单独解析的 html。

我很难弄清楚如何循环遍历初始 div。

谁能帮忙?

html示例:

<div><!-- stuff in here --></div>
<div><!-- stuff in here --></div>
<div><!-- stuff in here --></div>
<div><!-- stuff in here --></div>

在这个例子中,我希望最终代码循环 4 次,并为我提供每个 div 的内容

【问题讨论】:

标签: php html-parsing


【解决方案1】:

这应该可以工作(如果 HTML 在外部文件中):

$doc = new DOMDocument();
$doc->loadHTMLFile('test.html');
$divs = $doc->getElementsByTagName('div');
foreach($divs as $n) {
    echo $n->nodeValue;
}

如果字符串包含 HTML,您可以这样做:

$doc = new DOMDocument();
$doc->loadHTML('<html><body><div>A</div><div>B</div><div>C</div><div>D</div></body></html>');
$divs = $doc->getElementsByTagName('div');
foreach($divs as $n) {
  echo $n->nodeValue . "\n";
}

会产生:

A
B
C
D

【讨论】:

  • 有了这个,你只需要注意你的div中的div。这些也将被迭代。
  • 它是一个外部文件,我已经用 strpos 和 substr 分离出了我想要的部分,我可以在 HTML 片段上这样做吗?
  • 约翰,我在您的回答中添加了一些内容。通常我会将其作为评论添加到您的答案中,但由于它与您自己已经回答的内容或多或少相同,因此我立即对其进行了编辑。当然,如果您反对,请随时删除它。
  • 我可以让这个不能容忍错误吗?我可以粘贴(外部)我试图解析的 html?
  • @Bart K.,总是欢迎添加和改进。 :) @Chris,您可以通过验证它们实际上是要检查的字符串/文件中的 HTML 来添加错误检查。您还可以将 HTML 直接添加到 loadHTML 方法中,就像 Bart 的示例所示。
【解决方案2】:

如果是 XHTML,可以使用 SimpleXML:

$xml = simplexml_load_string($xhtmlstring);
foreach ($xml->div as $d) {
   {
   //parsing
   }
}

【讨论】:

  • 我尝试了简单的 xml,但不幸的是它无法加载,我不知道为什么!
  • 试试这个输出xml错误:libxml_use_internal_errors(true); $sxe = simplexml_load_string(""); if (!$sxe) { echo "加载 XML 失败\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } }
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多