0

我知道这个问题已经被问过很多次了,但我研究了很多例子,但我仍然无法从这个 html 表中获取我需要的数据。

我有一个生成这样的 html 表的 php 文件:

    <table width="97%">
    <tr><td align="center">
    <!-- table for columns -->
    <table border="0" cellpadding="15">
    <tr>
        <td valign="top">

        <table border="0" width="800">
        <caption style="font-size: 32px; font-weight: bold;">
        </caption>

        <!-- force column widths exactly (for some reason it didn't want to
        play along with normal width settings) -->
        <tr>
        <td><img src="/spacer.gif" width="160" height="1" border="0" alt="" /></td>
        <td><img src="/spacer.gif" width="170" height="1" border="0" alt="" /></td>
        </tr>
            <tr>
                <td style="">
                DATA1
                </td>

                <td width="200" style="font-size: 80px; font-weight:bold;">
                0            </td>
            </tr>

            <tr>
                <td style="">
                DATA2
                </td>

                <td width="200" style="font-size: 80px; font-weight:bold;">
                0            </td>
            </tr>
            <tr>
                <td style="">
                DATA3
                </td>

                <td width="200" style="font-size: 80px; font-weight:bold;">
        0            </td>
            </tr>
            <tr>
                <td style="">
                DATA4
                </td>

                <td width="200" style="font-size: 80px; font-weight:bold;">
                5            </td>
            </tr>
            <tr>
                <td style="">
                DATA5
                </td>

                <td width="200" style="font-size: 80px; font-weight:bold;">
                0            </td>
            </tr>
            <tr>
                <td style="">
                DATA6
                </td>

                <td width="200" style="font-size: 80px; font-weight:bold;">
                0            </td>
            </tr>


        <!-- end of stats_with_style loop -->

        </table>

        </td>



    <!-- end of groups loop -->

    </tr>
    </table>

    <br /><br />


    </td></tr>
    </table>

我想使用 php.ini 获取每个 DATA 集的 html(数字)(在每个样式之后)。

谁能阐明我如何做到这一点?

4

2 回答 2

0

该文件是使用 PHP 生成的,但是您想使用 PHP 来取回数据吗?也许您应该首先将这些数据保存在其他地方,以一种更易于使用 PHP 阅读的格式。

于 2014-01-26T20:26:46.433 回答
0

我通常会建议使用像Ganon这样的 DOM 解析器,但如果这个 HTML 的结构保持相当简单(像这样),那么仅使用 PHP 的本机 DOM 和 XPath 选择器可能只是一个更简单、开销更低的解决方案。将您的 HTML 加载到这样的字符串中:

<?php
$html = <<<EOF
<table width="97%">
    <tr><td align="center">
    <!--SNIP-->
EOF;

$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$data = [];

// targets any <td> with a <style> element and only selects odd elements
// (XPath counting starts at 1)
foreach($xpath->query("//td[@style][position() mod 2 = 0]") as $node) {
    //replace superflous whitespace in the string
    $data[] = preg_replace('/\s+/', '', $node->nodeValue);
}

现在您将拥有一个仅包含数值(您要求的)的 $data[] 数组。

如果您还需要键(DATA1 等...),通过循环遍历偶数元素将其变为关联数组是一项相当简单的工作,只需添加以下代码:

foreach($xpath->query("//td[@style][position() mod 2 = 1]") as $node) {
    $keys[] = preg_replace('/\s+/', '', $node->nodeValue);
}

$dataWithKeys = array_combine($keys, $data);

希望有帮助!

于 2014-01-26T22:23:16.020 回答