php simple_html_dom select 正确 table 数据

php simple_html_dom select correct table data

我在 html 文件中有 table(我感兴趣的片段):

<h3 class="subTitle">Odbitki</h3>
<div class="subtitleBottomEdge"></div>
<div class="pad10">
  <table class="mainContentArea">
    <tr>
      <td class="labelFont">Wszystkie odbitki:</td>
      <td class="itemFont">49946</td>
    </tr>
    <tr>
      <td class="labelFont">Kompletne odbitki równoważności (A4/Letter):</td>
      <td class="itemFont">49945.4</td>
    </tr>
    <tr>
      <td class="labelFont">Arkusze dwustronne:</td>
      <td class="itemFont">2735</td>
    </tr>
  </table>
</div>

我需要的只是在 "Wszystkie odbitki" 之后显示一个数字,例如:Wszystkie odbitki: 49946

我知道在 simple_html_dom 中可以,但我不知道如何使用 PHP。

代码:

require_once('simple_html_dom.php');

$html = file_get_html('http://127.0.0.1/tabela.html');

$table = null;
$needle = 'Odbitki';
foreach($html->find('h3') as $marker) {
  if ($marker->innertext == $needle) {
    $table = $marker->next_sibling();
    break;
  }
}
$data = array();
if ($table) {
  foreach($table->children() as $k => $tr) {
    foreach($tr->children as $td) {
      $data[$k][] = $td->innertext;
    }
  }
}
echo '<pre>';
print_r($data);

根据提供的 html 结构,您需要更改此行:

if($marker->innertext == $needle) {
    $table = $marker
        // `next_sibling` gets `div class="subtitleBottomEdge"`
        ->next_sibling()
        // `next_sibling` gets `<div class="pad10">`
        ->next_sibling()
        // `first_child` gives you a required table
        ->first_child();
    break;
}

更新一个单元格,例如:

foreach($table->children() as $k => $tr) {
    $data[$k][] = $tr
        // `first_child`  gets first `td`
        ->first_child()
        // `next_sibling`  gets second `td`
        ->next_sibling()
        ->innertext;
}

步骤 1. 准备

The first thing you'll need to do is download a copy of the simpleHTMLdom library, freely available from sourceforge.

下载中有多个文件,但您唯一需要的是 simple_html_dom.php 文件;其余的是示例和文档。 https://sourceforge.net/projects/simplehtmldom/

步骤 2. 解析基础知识

这个库非常易于使用,但在将其付诸实践之前,您应该了解一些基础知识。

加载中HTML

$html = new simple_html_dom();

// Load from a string
$html->load('<html><body><p>Hello World!</p><p>We're here</p></body>
</html>');

// Load a file
$html->load_file('http://net.tutsplus.com/');

您可以通过从字符串或文件加载 HTML 来创建初始对象。可以通过 URL 或通过本地文件系统加载文件。 获得 DOM 对象后,您可以通过使用 find() 和创建集合来开始使用它。集合是通过选择器找到的一组对象——语法与 jQuery 非常相似。 在你自己的问题中page1.html

   <h3 class="subTitle">Odbitki</h3><div class="subtitleBottomEdge"></div>
        <div class="pad10"><table class="mainContentArea">
          <tr>
            <td class="labelFont">Wszystkie odbitki:</td>
            <td class="itemFont">49946</td>
          </tr>
          <tr>
            <td class="labelFont">Kompletne odbitki równoważności (A4/Letter):</td>
            <td class="itemFont">49945.4</td>
          </tr>
          <tr>
          <td class="labelFont">Arkusze dwustronne:</td>
          <td class="itemFont">2735</td>
          </tr>

在这个例子HTML中,我们将看看如何访问第二段中的信息,更改它,然后输出结果。

# create and load the HTML
include('simple_html_dom.php');
$html = new simple_html_dom();
$html->load("page1.html");

# get an element representing the second paragraph
$element1 = $html->find('.labelFont');
$element2 = $html->find('.itemFont');

# modify it
$element1->innertext .= $element2->innertext;

# output it!
echo $html->save();