1

次の PHP コードを使用して、動的テーブルを正常に解析しました。

$docH = new DOMDocument();
$docH->loadHTMLFile($url);

//get everything inside the body element:
$bodyH = $docH->getElementsByTagName('body')->item(0);

foreach ($bodyH->childNodes as $childNode) {
       echo $docH->saveHTML($childNode);
} 

解析済み HTML テーブル:

<table>
    <tr>
        <td>5CG</td>
        <td>aass</td>
        <td>sxs</td>
        <td>sx</td>
        <td>EK</td>
        <td></td>
        <td>72</td>
    </tr>
    <td></td>
    <td>samplxs</td>
    <td>xs</td>
    <td></td>
    <td>xss</td>
    <td>fkxsx aus</td>
    <td>s</td>
    </tr>
    <td></td>
    <td>5AH.</td>
    <td>ds</td>
    <td>d</td>
    <td>sdf</td>
    <td>sdfsdf aus</td>
    <td></td>
    </tr>
    <tr>
        <td>6CG</td>
        <td>3.</td>
        <td>sfd</td>
        <td></td>
        <td>scs</td>
        <td>das aus</td>
        <td>a</td>
    </tr>
    <tr>
        <td>7DG</td>
        <td>6.</td>
        <td>s</td>
        <td>s</td>
        <td>sD</td>
        <td>sdsa.</td>
        <td></td>
    </tr>
    <td></td>
    <td>samplxs</td>
    <td>xs</td>
    <td></td>
    <td>xss</td>
    <td>fkxsx aus</td>
    <td>s</td>
    </tr>
    <tr>
        <td>7DG, 7CG, 7CR</td>
        <td>6.</td>
        <td>NsdR</td>
        <td>s</td>
        <td>SP</td>
        <td>fasdlt aus</td>
        <td>s</td>
    </tr>
    <td></td>
    <td>samplxs</td>
    <td>xs</td>
    <td></td>
    <td>xss</td>
    <td>fkxsx aus</td>
    <td>s</td>
    </tr>
    <tr>
        <td>9BR</td>
        <td>6.</td>
        <td>FEI</td>
        <td>sa</td>
        <td>DE</td>
        <td>fasdad aus</td>
        <td></td>
    </tr>
    <tr>
        <td>9AR, 9BR, 9CR</td>
        <td>62.</td>
        <td>BEH</td>
        <td></td>
        <td>sd</td>
        <td>fasda aus</td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td>6.</td>
        <td>MLR</td>
        <td></td>
        <td>FdR</td>
        <td>fsdfaus</td>
        <td></td>
    </tr>
    <tr>
        <td>E10C</td>
        <td>6.</td>
        <td>sdf</td>
        <td>d</td>
        <td>d</td>
        <td>fsdfs aus</td>
        <td></td>
    </tr>
    <tr>
</table>

しかし、私の目標は、最初の最初の<tr>要素にテキストが含まれる要素だけを要求して、最初に別のコンテンツを持つ別の要素があるまで、ユーザーが望むテーブルのコンテンツを表示することです。<td><tr><tr><td>

例: ユーザーが入力フィールドに「9BR」と入力した場合、次のように表示されます。

9BR 6. FEI sa DE fasdad aus 9AR、9BR、9CR 62. BEH sd fasda aus 6. MLR FdR fsdfaus

彼が 5CG を入力した場合:

<tr>
    <td>5CG</td>
    <td>aass</td>
    <td>sxs</td>
    <td>sx</td>
    <td>EK</td>
    <td></td>
    <td>72</td>
</tr>
<td></td>
<td>samplxs</td>
<td>xs</td>
<td></td>
<td>xss</td>
<td>fkxsx aus</td>
<td>s</td>
</tr>

または、6CG の場合:

<tr>
    <td>6CG </td>
    <td>3. </td>
    <td>sfd </td>
    <td> </td>
    <td>scs </td>
    <td>das aus</td>
    <td>a </td>
</tr>
4

1 に答える 1

2

XPath を使用すると、このような方法でうまくいくはずです
http://de3.php.net/manual/en/class.domxpath.php

$xpath = new DomXpath($docH);
$trs = $xpath->query('//tr[td[1][contains(text(), "BR9")]]');

最初の td にテキスト "anything" が含まれるすべての tr を検索します

最初が空の次の「tr」に関しては、td
これはこれを照会する最もエレガントな形式ではないかもしれませんが、機能します:

$query = '
//tr[td[1][contains(text(), "anything")]]
 |
//tr[td[1][contains(text(), "anything")]]
     /following-sibling::tr[td[1][not(text())] and preceding-sibling::tr[1][td[1][not(text()) or contains(text(), "anything")]]]
';

最初の td にテキスト "anything" が含まれるすべての tr を検索します

また、最初の td が空で、その前の兄弟 (trs) の最初の td
も空であるか、テキスト "anything" を含むすべての tr を検索します

例: http://3v4l.org/q6eDu

于 2013-11-01T13:59:13.207 に答える