PHP Xpath:获取包含指针的所有href值
使用PHP Xpath尝试快速提取html页面中的某些链接 以下内容将在mypage.html上找到所有href链接:PHP Xpath:获取包含指针的所有href值,php,xpath,href,Php,Xpath,Href,使用PHP Xpath尝试快速提取html页面中的某些链接 以下内容将在mypage.html上找到所有href链接: $nodes=$x->query(“//a[@href]”) 而以下内容将找到描述与我的针匹配的所有href链接: $nodes=$x->query(//a[contains(@href,'click me')]) 我试图实现的是在href本身上进行匹配,这是包含特定参数的更具体的查找url。这在Xpath查询中是可能的,还是应该开始处理第一个Xpath查询的输出?我不确定是否
$nodes=$x->query(“//a[@href]”)代码>
而以下内容将找到描述与我的针匹配的所有href链接:
$nodes=$x->query(//a[contains(@href,'click me')])代码>
我试图实现的是在href本身上进行匹配,这是包含特定参数的更具体的查找url。这在Xpath查询中是可能的,还是应该开始处理第一个Xpath查询的输出?我不确定是否正确理解了这个问题,但第二个Xpath表达式已经完成了您所描述的内容。它和元素的文本节点不匹配,但href属性:
$html = <<< HTML
<ul>
<li>
<a href="http://example.com/page?foo=bar">Description</a>
</li>
<li>
<a href="http://example.com/page?lang=de">Description</a>
</li>
</ul>
HTML;
$xml = simplexml_load_string($html);
$list = $xml->xpath("//a[contains(@href,'foo')]");
正如您所看到的,返回的NodeList只包含href包含foo的A元素(我知道这就是您要查找的内容)。它包含整个元素,因为XPath转换为获取href属性包含foo的所有A元素。然后,您可以使用
echo $list[0]['href'] // gives "http://example.com/page?foo=bar"
如果只想返回属性本身,则必须执行以下操作
//a[contains(@href,'foo')]/@href
请注意,在SimpleXml中,这将返回SimpleXml元素,但:
array(1) {
[0]=>
object(SimpleXMLElement)#3 (1) {
["@attributes"]=>
array(1) {
["href"]=>
string(31) "http://example.com/page?foo=bar"
}
}
}
但是您现在可以通过以下方式输出URL:
echo $list[0] // gives "http://example.com/page?foo=bar"
是的,但是搜索“针”将返回$node->nodeValue()中的文本部分;而不是想要的…?这就是我的意思。只有我的html文档在使用SimpleXML时失败。不过xpath查询是有效的,将其与DomXpath一起使用可以满足我的需要。谢谢
echo $list[0] // gives "http://example.com/page?foo=bar"