Работа с PHP Xpath пытается быстро вывести определенные ссылки на странице html.
Ниже $nodes = $x->query("//a[@href]");
все ссылки href на mypage.html: $nodes = $x->query("//a[@href]");
В то время как следующие ссылки найдут все ссылки href, где описание соответствует моей игле: $nodes = $x->query("//a[contains(@href,'click me')]");
То, что я пытаюсь достичь, является совпадением по самому href, более конкретному поиску url, которые содержат определенные параметры. Возможно ли это в запросе Xpath или я должен просто начать обработку вывода из первого запроса Xpath?
Не уверен, что я правильно понял вопрос, но второе выражение XPath уже делает то, что вы описываете. Он не совпадает с текстовым узлом элемента A, но атрибут 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')]");
Выходы:
array(1) { [0]=> object(SimpleXMLElement)#2 (2) { ["@attributes"]=> array(1) { ["href"]=> string(31) "http://example.com/page?foo=bar" } [0]=> string(11) "Description" } }
Как вы можете видеть, возвращаемый NodeList содержит только элемент A с href, содержащий foo (который я понимаю, это то, что вы ищете). Он связывает весь элемент, потому что XPath преобразует в Fetch все элементы A с атрибутом href, содержащим foo . Затем вы получите доступ к атрибуту с помощью
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"