我在这里遇到一个小问题,到目前为止还没有任何搜索能够解决。我正在制作一个脚本,使用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不会。我知道不应该以这种方式工作,但我不知道我可以通过哪种方式实现这一目标。
我希望得到任何反馈意见,我很乐意根据需要提供回复和修改。
答案 0 :(得分:0)
DOMXPath::query
会返回DOMNodeList
,因此您还可以通过DOMNodelist::item
访问这些元素。只有在查询结果中的第一个值之后,您才可以执行${$header}[] = $statnodes->item(0)->nodevalue;
,或者如果您想要所有值,则可以遍历它。
foreach ($statnodes as $stat)
{
${$header}[] = $stat->nodevalue;
}