online - PHP Xpath: obtener todos los valores href que contienen aguja
xpath visualizer (1)
No estoy seguro de entender la pregunta correctamente, pero la segunda expresión XPath ya hace lo que está describiendo. No coincide con el nodo de texto del elemento A, pero el atributo 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'')]");
Salidas:
array(1) {
[0]=>
object(SimpleXMLElement)#2 (2) {
["@attributes"]=>
array(1) {
["href"]=>
string(31) "http://example.com/page?foo=bar"
}
[0]=>
string(11) "Description"
}
}
Como puede ver, el NodeList devuelto contiene solo el elemento A con href que contiene foo (que entiendo es lo que está buscando). Contiene todo el elemento, porque el XPath se traduce en Fetch todos los elementos A con el atributo href que contiene foo . A continuación, accedería al atributo con
echo $list[0][''href''] // gives "http://example.com/page?foo=bar"
Si solo quieres devolver el atributo, deberías hacerlo
//a[contains(@href,''foo'')]/@href
Tenga en cuenta que en SimpleXml, esto devolvería un elemento SimpleXml aunque:
array(1) {
[0]=>
object(SimpleXMLElement)#3 (1) {
["@attributes"]=>
array(1) {
["href"]=>
string(31) "http://example.com/page?foo=bar"
}
}
}
pero puede dar salida a la URL ahora por
echo $list[0] // gives "http://example.com/page?foo=bar"
Trabajando con PHP Xpath intentando extraer rápidamente ciertos enlaces dentro de una página html.
Lo siguiente encontrará todos los enlaces href en mypage.html: $nodes = $x->query("//a[@href]");
Mientras que lo siguiente encontrará todos los enlaces href donde la descripción coincide con mi aguja: $nodes = $x->query("//a[contains(@href,''click me'')]");
Lo que estoy tratando de lograr es hacer coincidir en el propio href, direcciones de búsqueda más específicas que contienen ciertos parámetros. ¿Es eso posible dentro de una consulta Xpath o debo comenzar a manipular el resultado de la primera consulta Xpath?