我在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>
</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);
答案 0 :(得分:1)
根据提供的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 :(得分:1)
您需要做的第一件事就是下载一份 simpleHTMLdom库,可从sourceforge免费获得。
下载中有几个文件,但您唯一需要的是simple_html_dom.php文件;其余的是示例和文档。 https://sourceforge.net/projects/simplehtmldom/
这个库非常易于使用,但在实施之前应该先查看一些基础知识。
正在加载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();