Php 解析 html dom 和目标元素

Php parse html dom and target elements

我有一个游戏服务器,我想构建一个简单的 php 来吸引我的服务器玩家,因为没有 API 可以使用

经过一番搜索,我找到了这个 Simple php DOM Parser 这非常适合我想做的事情:)

假设我的服务器 link 包含此结构

<div id="server-page-info">

<div class="row-tight">
    <div class="box span1">
        <header>
            <h1>Players</h1>
        </header>
    </div>
    <div class="box span1">
        <header>
            <h1>Ping</h1>
        </header>
    </div>
</div>
<div class="row-tight">
    <div class="box span1">
        <section class="box-content">
            <h5>
                0 / 64
            </h5>
        </section>
    </div>
    <div class="box span1">
        <section class="box-content">
            <h5>
                -ms
            </h5>
        </section>
    </div>
</div>

</div>

幸运的我,有一堆 row-tightboxbox-content class 个名字 :)

所以我想获取其中一个 box-content 部分的值,该部分显示 0 / 64 以上

我的php代码

抱歉我是 PHP 的新手。您还可以看到我是如何定位元素的,但它不起作用,我什么也没得到 :)

require 'simple_html_dom.php';
$url = '';
$html = file_get_html($url);

$player = $html->find('div[id=server-page-info] .row-tight:nth-child(2) .box:first-child');

foreach( $player as $players ){

    echo $players->plaintext;

    }

我还要补充一个问题:) 现在,当我将服务器玩家值作为明文获取时,我想将其包装在 div :)

谢谢

来自 Simple html DOM manual 我没有看到它支持 nth-child,但它支持其他语法:$html->find('<element>', <nth-child>)。因此您的代码应如下所示:

$player = $html->find('div[id=server-page-info]')->find('.row-tight',1)->find('.box',0);

我建议使用 # 作为 id 而不是属性:

$player = $html->find('#server-page-info')->find('.row-tight',1)->find('.box',0);

更新

如果你想做下一步 find 你总是需要 select 只有一个元素 find('<element>', <nth-child>) 在你的情况下: $player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0);

我测试了下面的一块,它显示 0 / 64。

require 'simple_html_dom.php';
$html = str_get_html('<div id="server-page-info">
<div class="row-tight">
    <div class="box span1">
        <header>
            <h1>Players</h1>
        </header>
    </div>
    <div class="box span1">
        <header>
            <h1>Ping</h1>
        </header>
    </div>
</div>
<div class="row-tight">
    <div class="box span1">
        <section class="box-content">
            <h5>
                0 / 64
            </h5>
        </section>
    </div>
    <div class="box span1">
        <section class="box-content">
            <h5>
                -ms
            </h5>
        </section>
    </div>
</div>
</div>');
$player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0);
echo $player->plaintext;