2010-03-05 72 views
30

是否有任何简单的方法获取节点的所有属性而不检查它是否具有该属性? 总之,这里是什么,我试图做一个例子: 我有这个简短的DOMDocument:php dom获取节点的所有属性

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

还好..现在,如果我请与的getAttribute(“对准”)p标签我去拿中心值..这很酷,但我想看看如果p标签也有另一个属性像风格没有检查每个可能的属性。 在img标签上,我将不得不检查src,宽度,高度,风格,onclick等..以验证它们是否存在..但我想这可能是一个更简单的方法来查看所有属性。

+3

*(旁注)*一个有效的X(HT)ML文档必须有一个根元素,并且所有属性都必须用引号引起来。 – Gordon 2010-03-05 10:10:31

+0

*(提示)*如果这是严格阅读你可能会发现http://de3.php.net/manual/en/book.simplexml.php或http://simplehtmldom.sourceforge.net/manual.htm更容易使用。 – Gordon 2010-03-05 10:34:13

回答

-4

使用此代码,它会给你指定的属性。现在

 

<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值。

+6

问题被标记为PHP,而不是JavaScript,所以OP可能想要做这个服务器端。 – Gordon 2010-03-05 10:20:09

+0

单击元素时,这不仅仅显示align属性的值吗? – 2010-03-05 10:21:40

+0

@戈登:很好的地方。 @alin:你能否澄清和(如有)调整标签? – 2010-03-05 10:23:15

53

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

使用该属性,可以遍历属性,获取每个属性的名称和值,以及它们的​​和$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

谢谢。这很好。我不知道属性属性 – alin 2010-03-05 12:08:10

+1

不客气:-)玩得开心! – 2010-03-05 12:18:29

+1

这非常酷。你知道我如何修改这个来找到特定的属性?出于某种原因getAttribute被破坏.. – EllaJo 2011-05-13 15:48:39