Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/03/2010, 14:57
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Leer XML con SimpleXML y DOM

El método getElementsByTagName nos permite acceder a un elemento directamente, sin necesidad de estar recorriendo cada uno de los nodos. Al usar getElementsByTagName almacena todos los elementos encontrados y con el método item podemos recorrer cada uno de ellos.
Código PHP:
Ver original
  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18");
  4. $xmlDOM = new DOMDocument();
  5. $xmlDOM->loadXML($rss_forosdelweb);
  6. $documentElement = $xmlDOM->documentElement;
  7. $item = $documentElement->getElementsByTagName("item");
  8. for ($i=0; $i<$item->length; $i++) {
  9.     var_dump($item->item($i)->nodeName);
  10.     var_dump($item->item($i)->nodeValue);
  11. }

Vamos a mostrar el foro donde me encuentro y los datos a tomar son: el enlace del mensaje a leer, el título y la descripción.
Código PHP:
Ver original
  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18");
  4. $xmlDOM = new DOMDocument();
  5. $xmlDOM->loadXML($rss_forosdelweb);
  6. $documentElement = $xmlDOM->documentElement;
  7. echo "<span style='font-weight: bold; font-size: 26px;'>" . $documentElement->getElementsByTagName("title")->item(0)->nodeValue . "</span><br /><br />";
  8. $item = $documentElement->getElementsByTagName("item");
  9. for ($i=0; $i<$item->length; $i++) {
  10.     echo "<a href='". $item->item($i)->getElementsByTagName("link")->item(0)->nodeValue ."'>". $item->item($i)->getElementsByTagName("title")->item(0)->nodeValue ."</a> -> " . nl2br($item->item($i)->getElementsByTagName("description")->item(0)->nodeValue) . "<br /><br />";
  11. }

Para obtener los datos del usuario que reportó y ver el avatar, tenemos que tomar la información de los elementos "namespaces". Para ello usamos el método lookupNamespaceURI para obtener las direcciones de los "namespaces", luego con el método getElementsByTagNameNS obtenemos los valores.
Código PHP:
Ver original
  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18");
  4. $xmlDOM = new DOMDocument();
  5. $xmlDOM->loadXML($rss_forosdelweb);
  6. $documentElement = $xmlDOM->documentElement;
  7. $dc = $xmlDOM->lookupNamespaceURI("dc");
  8. $content = $xmlDOM->lookupNamespaceURI("content");
  9. $media = $xmlDOM->lookupNamespaceURI("media");
  10. echo "<span style='font-weight: bold; font-size: 26px;'>" . $documentElement->getElementsByTagName("title")->item(0)->nodeValue . "</span><br /><br />";
  11. $item = $documentElement->getElementsByTagName("item");
  12. for ($i=0; $i<$item->length; $i++) {
  13.     echo "<span style='color: #f00; font-weight: bold;'>" . $item->item($i)->getElementsByTagNameNS($dc,"creator")->item(0)->nodeValue . "</span> ";
  14.     if($item->item($i)->getElementsByTagNameNS($media,"content")->item(0)->nodeType == XML_ELEMENT_NODE){
  15.         $avatar = $item->item($i)->getElementsByTagNameNS($media,"content")->item(0);
  16.         echo "<img src='". $avatar->getAttribute("url") ."' alt='". $avatar->getElementsByTagNameNS($media,"title")->item(0)->nodeValue ."' title='". $avatar->getElementsByTagNameNS($media,"title")->item(0)->nodeValue ."' />";
  17.     }
  18.     echo " -><a href='". $item->item($i)->getElementsByTagName("link")->item(0)->nodeValue ."'>". $item->item($i)->getElementsByTagName("title")->item(0)->nodeValue ."</a> -> " . nl2br($item->item($i)->getElementsByTagName("description")->item(0)->nodeValue) . "<br /><br />";
  19. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 29/03/2010 a las 17:54