2012-01-10 2 views
0

Я пытаюсь сопоставить список полей с веб-сайта, используя объект php DOMXPath, и я борюсь с ним. Я попытался прочитать абсолютное положение, но он ломается, когда поле отсутствует, и я решил, что возможно использовать имена полей, разделенные сильным тегом, чтобы найти правильные значения. Как я могу это сделать?Как я могу сопоставить эти поля с помощью xpath?

сайт образец:

<div class="container"> 
    <strong>field1: </strong> 
    <a href="http://link/1">value1</a> 
    <a href="http://link/2">value2</a> 
    <br> 
    <strong>field2:</strong> 
    <a href="http://link/3">value3</a> 
    <br> 
    <strong>field3:</strong> 
    <a href="http://link/4">value4</a> 
</div> 

мне нужно что-то вроде:

array = { 
    field1 => 
     array = { 
      'value1', 
      'value2' 
     }, 
    field2 => 'value3', 
    field3 => 'value4' 
} 

or 

array = { 
    field1 => 'value1 value2', 
    field2 => 'value3', 
    field3 => 'value4' 
} 

рабочий пример будет наиболее apreciated, так как я просто beggining на эту тему.

ответ

1
$dom = new DOMDocument(); 
$dom->loadHTML($str); // Or however you load your HTML 

$xpath = new DOMXPath($dom); 
$items = $xpath->query('//div[@class = "container"]/strong'); 


$arr = array(); 
for($i = 0; $i < $items->length; $i++) 
{ 
    $node = $items->item($i); 
    $name = trim($node->nodeValue, ': '); 
    $node_items = array(); 
    while(true) 
    { 
     $node = $node->nextSibling->nextSibling; 
     if($node == NULL || $node->nodeName != 'a') 
     { 
      break; 
     } 
     $node_items[] = $node->nodeValue; 
    } 

    $arr[$name] = count($node_items) == 1 ? $node_items[0] : $node_items; 
} 

дает результат ($arr):

 
Array 
(
    [field1] => Array 
     (
      [0] => value1 
      [1] => value2 
     ) 

    [field2] => value3 
    [field3] => value4 
) 
+0

Привет Тим, когда я перепутал свой код в шахте принес что-то вроде: Array ( [0] => field1: [1] => field2: [2] => поле3: ), обратите внимание на поля вместо значений. но я думаю, что мне становится лучше, как это работает и должно быть в состоянии исправить. спасибо за код. – petervaz

+0

Моя ошибка, ваш код работает как шарм, и теперь я теперь, почему ничего, с которым я пытался работать. Еще раз спасибо. – petervaz

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