查找HTML块并将其分离到数组中

时间:2013-02-25 12:15:07

标签: php html regex parsing dom

首先,我想描述一下这个想法 - 任何人都知道任何CMS或一个简单的网站都有某种类型的块,例如wordpress主页上的文章列表,每个块都显示在一个信息块中:Title ,作者,内容,日期等 因此,主要思想是如何查找和分离这些HTML块并将它们中的每一个附加到数组中。 我认为首先需要清除它们:类,ID和样式。 的步骤1:

<div id="box1">
    <h3 class="title_style">Title1</h3>
    <p>content for box1</p>
    <div class="author">Author Name1<span class="style_date">date1<span>any text</div>
</div>
<div id="box2">
    <h3 class="title_style">Title2</h3>
    <p>content for box2</p>
    <div class="author">Author Name2<span class="style_date">date2<span>any text2</div>
</div>

<div>
    <h3>Title1</h3>
    <p>content for box1</p>
    <div>Author Name1<span>date1<span>any text</div>
</div>
<div>
    <h3>Title2</h3>
    <p>content for box2</p>
    <div>Author Name2<span>date2<span>any text2</div>
</div>

步骤2: 我需要找到每个块并将它们写入一个数组,这样我就可以将每个块放到表中的一行,如下所示:(请注意,这个块几乎存在于任何站点上,所以它不重要的是什么标记它有,他们只是重复不同的内容和属性,只有结构是相同的)

<table>
    <tr id="block1">
        <td>Title1</td>
        <td>content for box1</td>
        <td>Author Name1</td>
        <td>date1</td>
        <td>any text</td>
    </tr>
    <tr id="block2">
        <td>Title2</td>
        <td>content for box2</td>
        <td>Author Name2</td>
        <td>date2</td>
        <td>any text</td>
    </tr>
</table>

有什么想法吗?我需要逻辑如何做到这一点,而不是代码本身。

2 个答案:

答案 0 :(得分:2)

您可以使用PHP的DOMDocument类遍历文档的DOM。

所以你可以这样做:

    $str = <<<STR
      <div id="box1">
        <h3 class="title_style">Title1</h3>
        <p>content for box1</p>
        <div class="author">Author Name1<span class="style_date">date1</span>any text</div>
      </div>
      <div id="box2">
       <h3 class="title_style">Title2</h3>
       <p>content for box2</p>
       <div class="author">Author Name2<span class="style_date">date2</span>any text2</div>
      </div>
    STR;

    $dom = new DOMDocument();
    $dom->loadHTML($str);

$divs = $dom->getElementsByTagName('div');

foreach ($divs as $div) {
  //read child elements
}

答案 1 :(得分:1)

试试这个图书馆Simple HTML Dom Parser.