2010-03-05 71 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