php dom 获取节点的所有属性

2022-08-30 12:04:14

有没有简单的方法来获取节点的所有属性而不检查它是否具有该属性?简而言之,这是我试图做的一个例子:我有这个简短的domdocument:

<p align=center style="font-size: 12px;">some text</p>
<a href="#" target="_blank">some link<a/>

好。。现在,如果我用getAttribute('align')检查p标签,我会得到中心值。这很酷,但我想看看p标签是否还有另一个属性,如style,而不检查每个可能的属性。在img标签上,我必须检查src,宽度,高度,样式,点击等。以验证它们是否存在。但我认为这可能是查看所有属性的更简单方法。


答案 1

考虑到你的节点是 or ,你可以使用 DOMNode 类的 $attributes 属性:它包含节点具有的属性列表。DOMElementDOMNode

使用该属性,您可以遍历属性,获取每个属性的名称和值及其属性。$nodeName$nodeValue


例如,在你的情况下,你可以使用这样的东西:

$str = <<<STR
<p align=center style="font-size: 12px;">some text</p>
<a href="#" target="_blank">some link<a/>
STR;

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

$p = $dom->getElementsByTagName('p')->item(0);
if ($p->hasAttributes()) {
  foreach ($p->attributes as $attr) {
    $name = $attr->nodeName;
    $value = $attr->nodeValue;
    echo "Attribute '$name' :: '$value'<br />";
  }
}


这会让你得到这样的输出:

Attribute 'align' :: 'center'
Attribute 'style' :: 'font-size: 12px;'

也就是说,我们有节点的两个属性,而不知道它们之前的名称;对于每个属性,我们可以获得其名称和值。


答案 2

使用此代码,它将为您提供指定的属性。

 

<html>
<script>
function test()
{
getvalue=document.getElementById("iid").getAttribute("align")
alert ( getvalue) ;
}
</script>

<body>
<p id=iid align="center" background="red" onclick="test();" >
This is for testing
php dom get all attributes of a node
</p>
</body>
</html>

现在,当您单击 p 标记的 conent 时。它将显示您对齐 attirbute 值。


推荐