2013-03-11 1 views
0

Я пытаюсь извлечь 2 элемента, используя PHP Curl и Xpath!ищет петлю для 2 элементов в одно и то же время (php/xpath)

до сих пор элемент разделены foreach, но я хотел бы иметь их в то же время:

@$dom->loadHTML($html); 
$xpath = new DOMXpath($dom); 
$elements = $xpath->evaluate("//p[@class='row']/a/@href"); 
//$elements = $xpath->query("//p[@class='row']/a"); 

foreach ($elements as $element) { 
    $url = $element->nodeValue; 
    //$title = $element->nodeValue;  
} 

Когда я echo каждый из foreach я получаю только 1 элемент, и когда его эхом внутри foreach Я получаю все из них.

Мой вопрос в том, как я могу получить их оба в одно и то же время (url и title) и как лучше всего добавить их в myqsl с помощью pdo.

спасибо

ответ

1

В этом случае нет необходимости использовать XPath дважды. Вы можете сделать один запрос и перейти к связанным с ним другим узлам.

Например, вы найдете все интересующие вас href и получите их значение ownerElement (<a>).

$hrefs = $xpath->query("//p[@class='row']/a/@href"); 
foreach ($hrefs as $href) { 
    $url = $href->value; 
    $title = $href->ownerElement->nodeValue; 
    // Insert into db here 
} 

Или найти все <a> с, что вы заинтересованы в и получить их href атрибуты.

$anchors = $xpath->query("//p[@class='row']/a[@href]"); 
foreach ($anchors as $anchor) { 
    $url = $anchor->getAttribute("href"); 
    $title = $anchor->nodeValue; 
    // Insert into db here 
} 
+0

, который отлично поработал, спасибо большое, не могли бы вы предоставить мне некоторую ссылку, где я могу расширить свое знание xpath, пожалуйста! еще раз спасибо . – user2158439

+0

Хорошей отправной точкой является обзор [XPath Overview] (http://schlitt.info/opensource/blog/0704_xpath.html). – salathe

0

Вы перезапись $url на каждой итерации. Может быть, использовать массив?

@$dom->loadHTML($html); 
$xpath = new DOMXpath($dom); 
$elements = $xpath->evaluate("//p[@class='row']/a/@href"); 
//$elements = $xpath->query("//p[@class='row']/a"); 

$urls = array(); 

foreach ($elements as $element){ 
    array_push($urls, $element->nodeValue); 
    //$title = $element->nodeValue; 

} 
+0

не работает! то, что я хочу сделать, это получить thetitle и url того же элемента, что и запрос для каждого, который я накладываю на свой код, работает отлично, просто ищет простой способ получить оба и вставить их в db! – user2158439

Смежные вопросы