php dom获取节点的所有属性

时间:2010-03-05 10:00:18

标签: php dom

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

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

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

2 个答案:

答案 0 :(得分:64)

考虑到您将节点作为DOMElementDOMNode,您可以使用$attributes类的DOMNode属性:它包含一个属性列表节点有。

使用该属性,您可以使用$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;'

即。我们有节点的两个属性,之前不知道它们的名字;对于每个属性,我们可以获取其名称及其值。

答案 1 :(得分:-5)

  

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

 

<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标签的内容时。它将显示您对齐attirbute值。