domnodelist - nodes php
php dom obtiene todos los atributos de un nodo (2)
¿Hay alguna manera fácil de obtener todos los atributos de un nodo sin verificar si tiene ese atributo? En pocas palabras, aquí hay un ejemplo de lo que estoy tratando de hacer: tengo este corto domdocumento:
<p align=center style="font-size: 12px;">some text</p>
<a href="#" target="_blank">some link<a/>
de acuerdo ... ahora si reviso la etiqueta p con getAttribute (''alinear'') tendré el valor central ... eso está bien, pero quiero ver si la etiqueta p también tiene otro atributo como estilo sin verificar para cada atributo posible. en img tag tendré que comprobar si tengo src, width, height, style, onclick, etc. para verificar si existen ... pero creo que podría ser una forma más fácil de ver todos los atributos.
Use este código, le dará los atributos especificados.
<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>
Ahora cuando haces clic en el contenido de la etiqueta p. Le mostrará alinear los valores de attirbute.
Teniendo en cuenta que tiene su nodo como DOMElement
o DOMNode
, puede usar la propiedad $attributes de la clase DOMNode
: contiene una lista de los atributos que tiene el nodo.
Usando esa propiedad, puede recorrer los atributos, obtener el nombre y el valor de cada uno, con sus propiedades $nodeName
y $nodeValue
.
Por ejemplo, en tu caso, podrías usar algo como esto:
$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 />";
}
}
Lo cual te daría este tipo de resultados:
Attribute ''align'' :: ''center''
Attribute ''style'' :: ''font-size: 12px;''
es decir, tenemos los dos atributos del nodo, sin conocer sus nombres antes; y para cada atributo, podemos obtener su nombre y su valor.