2015-12-10 2 views
0

Учитывая следующий HTML строку:Как я могу получить все атрибуты с PHP xpath?

<div 
class="example-class" 
data-caption="Example caption" 
data-link="https://www.example.com" 
data-image-url="https://example.com/example.jpg"> 
</div> 

Как я могу использовать PHP с XPath для вывода/извлечения массив со всеми атрибутами, как пар ключ/значение?

Надеясь на выходе, как:

Array 
(
    [data-caption] => Example caption 
    [data-link] => https://www.example.com 
    [data-image-url] => https://example.com/example.jpg 
) 
// etc etc... 

Я знаю, как получить индивидуальные атрибуты, но я надеюсь сделать это одним махом. Вот что у меня есть:

function get_data($html = '') { 

    $dom = new DOMDocument(); 
    $dom->loadHTML($html); 
    $xpath = new DOMXPath($dom); 

    $nodes = $xpath->query('//div/@data-link'); 

    foreach ($nodes as $node) { 
     var_dump($node); 
    } 

} 

Спасибо!

ответ

2

В XPath, вы можете использовать @* ссылаться на атрибуты любого имени, например:

$nodes = $xpath->query('//div/@*'); 

foreach ($nodes as $node) { 
    echo $node->nodeName ." : ". $node->nodeValue ."<br>"; 
} 

eval.in demo

выход:

class : example-class 
data-caption : Example caption 
data-link : https://www.example.com 
data-image-url : https://example.com/example.jpg 
+1

Большое спасибо. Это сработало хорошо - хотя в моем случае я выталкиваю элементы в массив следующим образом: $ myarray = array(); $ myarray [$ node-> nodeName] = $ node-> nodeValue; –

1

Я думаю, что это должно делать то, что вы хотите - или, по крайней мере, дать вам основание для продолжения.

define('BR','<br />'); 
    $strhtml='<div 
     class="example-class" 
     data-caption="Example caption" 
     data-link="https://www.example.com" 
     data-image-url="https://example.com/example.jpg"> 
     </div>'; 

    $dom=new DOMDocument; 
    $dom->loadHTML($strhtml); 

    $xpath=new DOMXPath($dom); 
    $col=$xpath->query('//div'); 
    if($col){ 
     foreach($col as $node) if($node->nodeType==XML_ELEMENT_NODE) { 
      foreach($node->attributes as $attr) echo $attr->nodeName.' '.$attr->nodeValue.BR; 
     } 
    } 
    $dom = $col = $xpath = null; 
+0

Спасибо за это, пока он сработал, я выбрал ответ другого плаката, основываясь на его простоте и подобии того, что у меня уже было. –

+0

все в порядке - я поддержал его, потому что это было просто – RamRaider

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