2009-08-27 22 views
10

Estoy leyendo algunos XML con PHP y actualmente estoy usando la clase DOMDocument para hacerlo. Necesito una forma de obtener los nombres y valores de los atributos de una etiqueta (instancia de DOMElement), sin saber de antemano cuáles son. El documentation no parece ofrecer algo como esto. Sé que puedo obtener el valor de un atributo si tengo su nombre, pero de nuevo, no conozco ninguno de estos y necesito encontrar ambos.¿Hay alguna manera de obtener todos los atributos de un DOMElement?

También sé que otras clases como SimpleXMLElement tienen esta capacidad, pero estoy interesado en cómo se puede hacer con DOMDocument.

Respuesta

15

Puede obtener todos los atributos de un DomNode dado, utilizando la propiedad DomNode->attributes, le devolverá DOMNamedNodeMap que contiene los nombres y valores de los atributos.

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

Gracias! Solo una nota de que los documentos con los que se vinculó son para PHP4. Para aquellos que usan PHP5 (como yo), esta es la documentación más reciente: http://us.php.net/manual/en/class.domnode.php#domnode.props.attributes –

+0

Esto es incorrecto. El foreach le da DOMNodes, que tienen una propiedad nodeName y nodeValue. –

24

Si desea obtener nombre de atributo y valores de atributos (no los attributeNodes), tiene que llamar a la propiedad del objeto DOMNode $ attrNode-> nodeValue.

$attributes = array(); 

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

Esta es la respuesta más completa. –

Cuestiones relacionadas