Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Xpath:获取包含指针的所有href值_Php_Xpath_Href - Fatal编程技术网

PHP Xpath:获取包含指针的所有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查询的输出?我不确定是否

使用PHP Xpath尝试快速提取html页面中的某些链接

以下内容将在mypage.html上找到所有href链接:
$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"