2009-08-27 31 views
10

Tôi đang đọc một số XML với PHP và hiện đang sử dụng lớp học DOMDocument để làm như vậy. Tôi cần một cách để lấy tên và giá trị của thuộc tính (ví dụ của DOMElement) của thẻ, mà không biết trước bất kỳ điều gì trong số đó. Các documentation dường như không cung cấp bất cứ điều gì như thế này. Tôi biết rằng tôi có thể nhận được giá trị của một thuộc tính nếu tôi có tên của nó, nhưng một lần nữa, tôi không biết một trong số này và cần phải tìm cả hai.Có cách nào để có được tất cả các thuộc tính của DOMElement không?

Tôi cũng biết rằng các lớp khác như SimpleXMLElement có khả năng này, nhưng tôi quan tâm đến cách thực hiện nó với DOMDocument.

Trả lời

15

Bạn có thể nhận tất cả các thuộc tính của một DomNode cụ thể, sử dụng thuộc tính DomNode->attributes, nó sẽ trả lại cho bạn DOMNamedNodeMap chứa các tên và giá trị thuộc tính.

foreach ($node->attributes as $attrName => $attrNode) { 
    // ... 
} 
+0

Cảm ơn! Chỉ cần lưu ý rằng các tài liệu bạn liên kết là dành cho PHP4. Đối với những người sử dụng PHP5 (như tôi), đây là tài liệu gần đây hơn: http://us.php.net/manual/en/class.domnode.php#domnode.props.attributes –

+0

Điều này là sai. Foreach cung cấp cho bạn DOMNodes, có thuộc tính nodeName và nodeValue. –

24

Nếu bạn muốn nhận tên thuộc tính và giá trị thuộc tính (không phải thuộc tínhNodes), bạn phải gọi thuộc tính $ attrNode-> nodeValue của đối tượng DOMNode.

$attributes = array(); 

foreach($element->attributes as $attribute_name => $attribute_node) 
{ 
    /** @var DOMNode $attribute_node */ 
    $attributes[$attribute_name] = $attribute_node->nodeValue; 
} 
+0

Đây là câu trả lời hoàn chỉnh hơn. –

Các vấn đề liên quan