【问题标题】:Parsing HTML with PHP and get values by using cycle使用 PHP 解析 HTML 并使用循环获取值
【发布时间】:2015-04-02 14:53:10
【问题描述】:

我有这样的 HTML 结构

 <div class = article-comments>
  <div class="article-comment">
     <div class="article-comment-header">...</div>
     <div class="article-comment-content">...</div>
  </div>
  <div class="article-comment">
     <div class="article-comment-header">...</div>
     <div class="article-comment-content">...</div>
  </div>
</div>
.
.
.
</div>

我有一个 div 元素 - cmets,其中包含许多其他 div 元素 - comment。我需要获取包含评论创建者名称的 header 元素和包含评论的 *content。我在 PHP 中有这样的代码:

foreach($bot->parseBetweenRegexArray($data, '<div.*class="article-comment-content">', '<\/div>') as $commentary ){ 

   printf("comment: %s",$commentary); 

foreach($bot->parseBetweenRegexArray($data, '<div.*class="article-comment-header">', '<\/div>') as $name)  {

   printf("name: %s",$name); '<br />';
                            }
 }

但是使用此代码我无法获得正确的顺序,例如评论作者姓名和相应的评论等。 如何做到这一点?

谢谢!

【问题讨论】:

  • 您无法使用正则表达式解析 HTML:stackoverflow.com/a/1732454/140925
  • 如果是这样,我怎样才能通过使用循环正确获取这些 HTML div 属性的值?
  • 我不知道循环,但我会寻找 DOM 或 SAX 解析器。
  • foreach($html->find('div.article-cmets') as $article) { ? }.......如何用DOM解析器做到这一点?

标签: php parsing


【解决方案1】:

如果您不喜欢使用 DOM(并且不想将 Regex 与 HTML 一起使用),您可以尝试使用 &lt;div class="article-comment-header"&gt; 字符串对 HTML 文本进行explode

结果数组的第一个元素(索引 0)将无用(它都在第一个 &lt;div&gt; 之前,所以从第二个(索引 1)开始循环。

然后用&lt;/div&gt; 分解第二个元素。第二个数组的第一个元素是标题。

然后做类似的事情来获取作者。

提示:PHP explode() 函数提供了额外的参数 $limit 允许您将文本分成两部分。

我同意这不是最好的解决方案,但我认为很简单。我宁愿使用一些 XML 类来查找它。

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 2016-07-25
    • 2019-06-05
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2012-09-30
    相关资源
    最近更新 更多