【问题标题】:PHP Simple HTML DOM Parser Call to a member function children() on a non-objectPHP 简单 HTML DOM 解析器调用非对象上的成员函数 children()
【发布时间】:2013-04-22 12:24:10
【问题描述】:

我对 PHP 很陌生,所以我尝试使用 Simple HTML DOM Parser 从网站获取我需要的信息。 这是示例节点:

<div>
    <h1>Hello</h1>
    <figure id="XXX">
        <div class="abc">ABC</div>
        <div class="qwe">QWE</div>
        <div class="zxc">ZXC</div>
    </figure>
</div>

$element 包含上面的节点。我需要得到的是“QWE”,所以我尝试:

$name = $element->find('figure[id=XXX]')->children(1)->innertext;

但现在的问题是:致命错误:在非对象上调用成员函数 children(),如果我停在 find('figure[id=XXX]' ),但它返回数组,我无法获得确切的信息。

有什么解决办法吗?请帮忙,提前谢谢。

【问题讨论】:

    标签: php parsing simple-html-dom php-parser


    【解决方案1】:

    你去吧:

     $str = '<div>
                <h1>Hello</h1>
                <figure id="XXX">
                <div class="abc">ABC</div>
                <div class="qwe">QWE</div>
                <div class="zxc">ZXC</div>
                </figure>
            </div>';
    
    $html = str_get_html($str);
    
    $str = $html->find('figure[id=XXX]',0)->children(1)->plaintext;
    
    echo($str);
    

    find 返回 elements 并且您需要 single element 所以在 find 的第二个参数处设置索引 0(第一个)

    【讨论】:

    • 感谢@Adidi!我想这个问题差不多 1 ​​小时,但你在几秒钟内就解决了。非常感谢。实际上 find(string $selector [,int $index]) 索引是什么意思?
    • 从集合/列表中返回什么元素 - find 总是返回一个列表,并通过设置 $index 告诉它你想要列表中该索引中的特定元素 - 所以如果你选择一些东西id 必须是第一个元素 - 表示索引为零
    • 没问题,接受你的回答。非常感谢您的解释。 XD
    • 对不起@Adidi,还有1个问题,当找不到标签时有什么解决方案可以解决吗?例如,假设当前元素中不存在
    • 没关系 - 很乐意提供帮助 - 总是询问返回值 - 它是返回列表(数组)还是单个元素 - 如果找不到它,它将返回 null 或空数组,所以你可以做:$els = $html-&gt;find('something'); if($els){exits}else{not exits};
    【解决方案2】:

    最好这样做:

    $html->find('figure#XXX > *[2]',0)->plaintext;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2016-07-30
      • 1970-01-01
      相关资源
      最近更新 更多