2010-03-05 18 views
30

¿hay alguna manera fácil de obtener todos los atributos de un nodo sin verificar si tiene ese atributo? resumen, he aquí un ejemplo de lo que estoy tratando de hacer: tengo este breve DOMDocument:php dom obtener todos los atributos de un nodo

<p align=center style="font-size: 12px;">some text</p> 
<a href="#" target="_blank">some link<a/> 

bien .. ahora si puedo comprobar con etiqueta p getAttribute ('align') Voy a por el valor central ... eso es genial, pero quiero ver si la etiqueta p también tiene otro atributo como estilo sin verificar cada atributo posible. en la etiqueta img tendré que verificar src, ancho, alto, estilo, clic, etc. para verificar si existen ... pero estoy pensando que podría ser una forma más fácil de ver todos los atributos.

+3

* (nota al margen) * Un documento X (HT) ML válido debe tener un elemento raíz y todos los atributos deben estar entre comillas. – Gordon

+0

* (sugerencia) * Si esto es estrictamente para leer, puede encontrar http://de3.php.net/manual/en/book.simplexml.php o http://simplehtmldom.sourceforge.net/manual.htm más fácil de leer utilizar. – Gordon

Respuesta

-4

Utilice 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 hace clic en el conent de la etiqueta p. Le mostrará alinear los valores de attirbute.

+6

La pregunta está etiquetada PHP, no JavaScript, por lo que el OP probablemente quiera hacer este lado del servidor. – Gordon

+0

¿No muestra esto simplemente el valor del atributo de alineación al hacer clic en el elemento? –

+0

@Gordon: Buen lugar. @alin: ¿Podría aclarar y (en caso de) ajustar las etiquetas? –

53

que tienen Teniendo en cuenta su nodo como DOMElement o DOMNode, puede utilizar la propiedad $attributes de la clase DOMNode: contiene una lista de los atributos que tiene el nodo.

Usando esa propiedad, puede recorrer los atributos, obteniendo el nombre y el valor de cada uno, con sus propiedades $nodeName y $nodeValue.


Por ejemplo, en su caso, usted podría utilizar 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 />"; 
    } 
} 


cual sería conseguir que este tipo de salida:

Attribute 'align' :: 'center' 
Attribute 'style' :: 'font-size: 12px;' 

es decir, que tienen los dos atributos del nodo, sin conocer sus nombres antes; y para cada atributo, podemos obtener su nombre y su valor.

+1

gracias. esto está funcionando bien No estaba al tanto de los atributos de la propiedad – alin

+1

De nada :-) Diviértase! –

+1

Eso es muy bueno. ¿Sabes cómo puedo modificar esto para encontrar atributos específicos? Por alguna razón, getAttribute está roto ... – EllaJo

Cuestiones relacionadas