2013-05-26 3 views
3

Я использую PHP DomDocument и пытается выкапывать то, что выглядит следующим образом:Получить все элементы, которые имеют атрибут itemprop

<div itemprop='movie'>Fight Club</div> 

это также может выглядеть следующим образом:

<span itemprop='musician'>Ozzy Osbourne</span> 

Я хочу захватить все из itemprop='n' на странице и поместить их в массив для хранения своего значения nodevalue и связанного с ним имени itemprop. Мой код до сих пор выглядит следующим образом:

function getItemprops(){ 
     foreach($this->dom->getAttribute("itemprop") as $buffer) { 
       $itempropList = array(
        'theNodeValue' => $buffer->nodeValue, 
        'theItemprop' => $buffer->getAttribute("itemprop") 
       ) 
       return $itempropList; 
     } 
} 

Мой код должен получить массив где-то вдоль линий:

array (
     array(
     0 => 
       "theNodeValue" => "Fight Club", 
       "theItemprop" => "movie" 
     1 => 
       "theNodeValue" => "Fight Club", 
       "theItemprop" => "movie" 
    ) 
) 

К сожалению, мой код возвращает Fatal error: Call to undefined method DOMDocument::getAttribute().

Так что, в основном, я хочу выбрать все itemprop="" и поместить их в массивы.

Спасибо за помощь!

ответ

3

Вам нужно использовать XPath, чтобы сначала выбрать все узлы с вашим обязательным атрибутом, затем цикл trhough возвращенных узлов для получения текстового значения и значения атрибута; например

$d = new DOMDocument(); 
$d->loadHTML($xmlsource); 
$xpath = new DOMXPath($d); 
$nodes = $xpath->query('//*[@itemprop]'); //this catches all elements with itemprop attribute 
foreach ($nodes as $node) { 
    // do your stuff here with $node 
+0

Огромное спасибо! –

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