我正在尝试解析所有脚本src链接值,但我得到一个空数组。
$dom = new DOMDocument();
$file = @$dom->loadHTML($remote);
$xpath = new DOMXpath($dom);
$link = $xpath->query('//script[contains(@src, "pcode")]');
$return = array();
foreach($link as $links) {
$return[] = $links->nodeValue;
}
答案 0 :(得分:2)
您的XPATH查询看起来有效,应该抓取包含<script>
的属性src
的每个pcode
。
如果它返回一个空数组,则需要检查一些事项:
确保DOM文档和加载,并且在将其加载到XPATH时没有错误。被抑制的DOM->负载可能会发出错误或警告。如果您在其他地方查询并且它可以正常工作,那么请忽略它。
确保文档中的代码是大小写匹配的。
尝试
$link = $xpath->query("//script[contains(@src, 'pcode')]");
看起来很傻,只是切换引号,但你永远不知道。
答案 1 :(得分:1)
请务必检查名称空间。如果你的HTML包含这样的声明
<html xmlns="http://www.w3.org/1999/xhtml">
您需要使用文档
注册命名空间$xp = new domxpath( $xml);
$xp->registerNamespace('html', 'http://www.w3.org/1999/xhtml' );
寻找像这样的元素
$elements = $xp->query( "//html:script", $xml );
命名空间,因为偏执狂会带来信心。