将DOMDocument数据放在foreach之外

时间:2013-02-21 03:47:11

标签: php xpath domdocument

我在这里遇到一个小问题,到目前为止还没有任何搜索能够解决。我正在制作一个脚本,使用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不会。我知道不应该以这种方式工作,但我不知道我可以通过哪种方式实现这一目标。

我希望得到任何反馈意见,我很乐意根据需要提供回复和修改。

1 个答案:

答案 0 :(得分:0)

DOMXPath::query会返回DOMNodeList,因此您还可以通过DOMNodelist::item访问这些元素。只有在查询结果中的第一个值之后,您才可以执行${$header}[] = $statnodes->item(0)->nodevalue;,或者如果您想要所有值,则可以遍历它。

foreach ($statnodes as $stat) 
{
   ${$header}[] = $stat->nodevalue;
}