我想用xpatch选择所有标记,这些标记的href属性等于一个URL列表数组中的值。
虽然我在stackoverflow上找到了许多示例,但所有这些示例都返回以下错误:; 警告:DOMXPath::query():...
中的表达式无效
这是我测试没有成功的代码:
$xpath->query("//a[@href=('facebook.com', 'google.com', 'amazon.com')]");
如果尝试使用一个值可以正常工作,如下所示:
$xpath->query("//a[@href=('facebook.com')]");
但是如果我试图添加一个多值返回所提到的错误,我有一个大约有1000个URL的数组,我想选择数组中具有href属性值的所有链接。
这是用xpatch加载DOM用DOMDocument加载的代码
$dom = new DOMDocument( '1.0', 'utf-8' );
$xpath = new DomXpath($dom);
我想澄清一下,执行速度对我来说很重要。 在您看来,是选择所有链接,然后通过带有in_array的foreach循环对xpatch进行检查更快,还是直接将条件插入xpatch更快?
针对值列表进行测试需要XPath2.0,但PHP DOMXPath库仅支持XPath1.0。 因此,您不能使用
//a[@href=('facebook.com', 'google.com', 'amazon.com')]
相反,使用
//a[@href='facebook.com' or @href='google.com' or @href='amazon.com']
至于相对于其他备选方案的执行速度,例如使用XPath获取所有a
元素,并在宿主语言中迭代以筛选感兴趣的元素,则遵循性能评估的通用规则:测量,不要猜测(或请其他人为您猜测)。