如何使用PHP xpath获取所有属性?

时间:2015-12-10 10:49:21

标签: php xpath

给出以下HTML字符串:

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

如何使用带xpath的PHP输出/检索具有键/值对的所有属性的数组?

希望输出如下:

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 个答案:

答案 0 :(得分: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 :(得分: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;