0

我在这里有一个小问题,到目前为止,还没有多少搜索能够解决。我正在制作一个使用 cURL 从诊断工具中提取数据的脚本。我可以解释更多关于它是如何工作的,但问题只是语法问题,不知道我需要什么。这是我的代码:

    $dom = new domdocument;
    $dom->loadHTML($curlhtml);
    $finder = new DomXPath($dom);
    $headname="msg_head";
    $statname="msg_sub_head";
    $headnodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $headname ')]");     
    foreach ($headnodes as $head) 
    {
        $header = $head->nodeValue;
        $headarray[] = $head->nodeValue;

        $statnodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $statname ')]");

        ${$header}[] = $statnodes->nodevalue;
    }

我的目标是将“statnodes”查询中的所有结果加载到单独的数组中,以“headnodes”查询中的所有结果命名。

$head->nodeValue 正是我想要的,因为它应该是因为 $head 在 foreach 循环中声明的。但是, $statnodes->nodeValue 没有。我知道它不应该那样工作,但我不知道我可以通过哪种方式来实现这一点。

如有任何反馈,我将不胜感激,我很乐意根据需要提供回复和编辑以进行任何澄清。

4

1 回答 1

0

DOMXPath::query返回 aDOMNodeList所以你也可以通过DOMNodelist::item. 假设您只在查询结果中的第一个值之后,${$header}[] = $statnodes->item(0)->nodevalue;如果您想要所有值,您可以执行或循环遍历它。

foreach ($statnodes as $stat) 
{
   ${$header}[] = $stat->nodevalue;
}
于 2013-02-21T03:54:38.357 回答