angular tutorial

Aunque ya tiene un rato que hice esto volvió a salir la necesidad de leer un rss en formato xml con angular así que aprovecho para poner cómo resolví esto de forma muy sencilla usando JS en un proyecto de angular.

¿como leer rss en xml con angular?

El punto más importante es conocer la siguiente función DOMParser() ya que con esto vamos a hacer la descomposición del archivo xml junto con este otro elemento parseFromString().

Para hacer estas llamadas necesitas hacerlo con XMLHttpRequest que es nativo de js, En caso de esta petición tenia que sacar una imagen que viene embebida en la descripción así que tuve que hacer un substring y como solo debía imprimir las 5 primeras noticias esta fijo en el for , en general debería funcionar con tu modelo.

pero para mayor entendimiento dejo un ejemplo a continuación

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class BienestarService {

  constructor(private http: HttpClient) { }

//llamada principal
  rssInfo(){
    var req = new XMLHttpRequest();
    req.open('GET', 'https://blog.tecsalud.mx/rss.xml', false);
    req.send(null);
    if (req.status == 200)
      return this.convertXMLtoJSON (req.responseText);
  }

//funcion que convierte xml a json
  convertXMLtoJSON(xmltxt){
    // Create the return object
    var obj = {};
    let xml = (new DOMParser()).parseFromString(xmltxt, "text/xml");
     //modelo de mi front
    let resp = {
      title: '',
      photo: '',
      author: '',
      create: '',
      link: ''

    }
    let jsonarr = [];
//for que recorre los objetos del xml 
    for(let x = 0; x < 5; x ++){
//el xml de este blog trae item por cada articulo y dentro etiquetas del body
      let y = xml.getElementsByTagName('item')[x].getElementsByTagName('description')[0].childNodes[0].nodeValue
      let ini = y.search('src')
      let fin = y.search('alt')
      let sub = y.substring(ini + 5,fin - 2)

//ordenamos el xml al modelo
      resp = {
        title: xml.getElementsByTagName('item')[x].getElementsByTagName('title')[0].childNodes[0].nodeValue,
        photo: sub,
        author: xml.getElementsByTagName('item')[x].getElementsByTagName('dc:creator')[0].childNodes[0].nodeValue,
        create: xml.getElementsByTagName('item')[x].getElementsByTagName('pubDate')[0].childNodes[0].nodeValue,
        link: xml.getElementsByTagName('item')[x].getElementsByTagName('link')[0].childNodes[0].nodeValue

      }
      jsonarr.push(resp)

    }
    return jsonarr;
  }
}
 

La ventaja de esta llamada es que hasta el día de hoy, esto no ha caducado al ser js nativo

por Cesar Flores

Programador de tiempo completo, Gamer de medio tiempo y fotógrafo ocasionalmente, me gusta el front-end y mi framework favorito es angular aunque no por eso le hago el feo a un nuevo lenguaje.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.