2009-08-27 4 views
10

Je lis du XML avec PHP et j'utilise actuellement la classe DOMDocument pour le faire. J'ai besoin d'un moyen de saisir les noms et les valeurs des attributs d'une étiquette (instance de DOMElement), sans savoir à l'avance ce que l'un d'eux est. Le documentation ne semble pas offrir quelque chose comme ça. Je sais que je peux obtenir la valeur d'un attribut si j'ai son nom, mais encore une fois, je ne connais pas l'un ou l'autre et j'ai besoin de trouver les deux.Existe-t-il un moyen d'obtenir tous les attributs d'un DOMElement?

Je sais aussi que d'autres classes comme SimpleXMLElement ont cette capacité, mais je suis intéressé par la façon dont cela peut être fait avec DOMDocument.

Répondre

15

Vous pouvez obtenir tous les attributs d'un DomNode donné, en utilisant la propriété DomNode->attributes, il vous renverra DOMNamedNodeMap contenant les noms et les valeurs des attributs.

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

Merci! Juste une note que les documents que vous avez liés sont pour PHP4. Pour ceux qui utilisent PHP5 (comme moi), voici la documentation la plus récente: http://us.php.net/manual/fr/class.domnode.php#domnode.props.attributes –

+0

C'est faux. Foreach vous donne DOMNodes, qui ont une propriété nodeName et nodeValue. –

24

Si vous souhaitez obtenir attribuer le nom et les valeurs d'attribut (pas les attributeNodes) vous devez appeler la propriété $ attrNode-> nodeValue de l'objet DOMNode.

$attributes = array(); 

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

Celui-ci est la réponse la plus complète. –

Questions connexes