给出以下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);
}
}
谢谢!
答案 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;