2009-10-20 44 views
6

Hola tengo una respuesta del API en formato XML con una serie de artículos como este:PHP DOMDocument obtener el atributo de etiqueta

<item> 
<title>blah balh</title> 
<pubDate>Tue, 20 Oct 2009 </pubDate> 
<media:file date="today" data="example text string"/> 
</item> 

Quiero usar DOMDocument para obtener los "datos" de los atributos de la etiqueta " archivo multimedia". Mi intento a continuación no funciona:

$xmldoc = new DOMDocument(); 
$xmldoc->load('api response address'); 
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) { 
$nodes = $feeditem->getElementsByTagName('media:file'); 
$linkthumb = $nodes->item(0)->getAttribute('data'); 
} 

¿Qué estoy haciendo mal? Por favor ayuda.

EDITAR: No puedo dejar comentarios por alguna razón Marcos. Obtengo el error

Call to a member function getAttribute() on a non-object 

cuando ejecuto mi código. También he intentado

$nodes = $feeditem->getElementsByTagNameNS('uri','file'); 
$linkthumb = $nodes->item(0)->getAttribute('data'); 

donde uri es el uri relacionado con el espacio de nombre de medios (NS) pero nuevamente el mismo problema.

Tenga en cuenta que el elemento multimedia es de la forma no, creo que esto es parte del problema, ya que generalmente no tengo problemas para analizar los atributos.

Respuesta

8

El ejemplo que proporcionó no debería generar un error. Lo he comprobado y $ linkthumb contenía el "ejemplo de cadena de texto" cadena como se esperaba

Asegurar la medios espacio de nombres se define en el XML devuelto lo contrario será DOMDocument error a cabo.

Si usted está recibiendo un error específico, por favor editar el post para incluirlo

Editar:

Pruebe el siguiente código:

$xmldoc = new DOMDocument(); 
$xmldoc->load('api response address'); 
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) { 
    $nodes = $feeditem->getElementsByTagName('file'); 
    $linkthumb = $nodes->item(0)->getAttribute('data'); 
    echo $linkthumb; 
} 

También es posible que desee ver en SimpleXML y Xpath ya que hace que leer XML sea mucho más fácil que DOMDocument.

+0

que lo hizo, el código adicional. ¡Gracias! –

3

Alternativamente,

$DOMNode -> attributes -> getNamedItem('MyAttribute') -> value; 
Cuestiones relacionadas