此行会在我的Web主机上崩溃页面,但不会在我的localhost上崩溃

问题描述 投票:0回答:2
$title = $xpath->query("span[@class='item_list']",$item)[0];

我无法弄清楚为什么它只在我在我的网络主机上省略这一行时才有效。 localhost似乎正常且功能正常。这用于Wordpress 4.9.4中的模板。我不知道主机的PHP版本是什么。此行位于另一个xpath查询的循环内,如果上面的行被删除,它将与页面一起使用:

foreach( $xpath->query("//div[@class='product_list']") as $item) {    }

我的网络主机上的php有限制设置阻止我做多个查询吗?或者是嵌套查询?

php wordpress xpath syntax domdocument
2个回答
1
投票

在较旧的PHP版本(<5.6.3)中,节点列表不能被视为数组。

以下是避免此问题的几种方法。

使用->item()方法

$titleNode = $xpath->query("span[@class='item_list']",$item)->item(0);

在Xpath中使用限制

foreach ($xpath->query("span[@class='item_list'][1]",$item) as $titleNode) {
  //...
}

这将节点列表中的节点限制为第一个节点。如果Xpath表达式与节点不匹配,则可以对第一个节点执行一次foreach()。验证这是否是要处理的标题节点是一个很好的快捷方式。

直接获取文本内容

$titleString = $xpath->evaluate("string(span[@class='item_list'])",$item);

Xpath表达式可以返回标量变量(字符串,数字,布尔值)的结果。这只适用于DOMxpath::evaluate()string()将第一个匹配的节点强制转换为字符串(返回其文本内容)。如果没有匹配节点,则返回空字符串。


0
投票

This answer解决了我的问题。当我打开脚本上的错误报告时,罪魁祸首出现了,并告诉我:

Fatal error: Cannot use object of type DOMNodeList as array

我引用了错误,并了解到它是由我最初怀疑的本地主机和Web主机之间的不同PHP版本引起的。

© www.soinside.com 2019 - 2024. All rights reserved.