Невозможно получить доступ к атрибутам xml при циклическом просмотре элементов json, проанализированного xml2js

Я пытаюсь получить доступ к атрибутам элементов в xml rss-канале после того, как xml был проанализирован в json с использованием xml2js. Я могу получить доступ к индивидуальные атрибуты, используя items[0].el.$.attribute. Однако, если я перебираю каждый элемент, я не могу углубиться дальше el. Попытка углубиться в цикл (используя items.map(item => { item.el.$ })) дает мне ошибку, где el теперь не определен...

TypeError: Cannot read property '$' of undefined

Вот [ДЕМО] и мой код (╭ರ_•́)

const express = require('express');
const { parseString } = require('xml2js');
const axios = require('axios');

const app = express();

app.use(express.static('public'));

app.get('/', async (req, res) => {

  const rss = 'https://www.kijiji.ca/rss-srp-rv-camper-trailer/vancouver/c172l1700287'

  axios.get(rss, { responseType: 'text'})
  .then((res) => {
    parseString(res.data, { explicitArray: false }, (err, res) => {
      const items = res.rss.channel.item;

      // THIS WORKS! (╯°o°)╯
      console.info(items[0].enclosure.$.url)

      // THIS DOES NOT WORK... ಠ_ಠ
      items.map(item => {
        console.info(item.enclosure.$.url);
      })

      // THIS WORKS! (╯°o°)╯
      items.map(item => {
        console.info(item.enclosure);
      })

    })
  })
})

// listen for requests :)
const listener = app.listen(process.env.PORT, function() {
  console.info('Your app is listening on port ' + listener.address().port);
});

В приведенном выше примере я анализирую этот RSS-канал Киджиджи с помощью xml2js. После синтаксического анализа я могу получить доступ к атрибутам элемента, используя json.rss.channel.item[0].enclosure.$.url.

Однако, если я перебираю элементы (используя цикл for, forEach или map), я не могу углубиться дальше, чем json.rss.channel.item[0].enclosure.

Что мне здесь не хватает?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
456
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Запустив пример локально, я вижу, что элемент с title: '1999 safari GMC van with wheelchair lift' не имеет свойства enclosure. Я думаю, что это больше проблема с данными, чем с JavaScript, кроме программирования, чтобы учесть это.

Вы можете подтвердить это следующей проверкой XML:

curl https://www.kijiji.ca/rss-srp-rv-camper-trailer/vancouver/c172l1700287 | grep -C 10 "1999 safari GMC van with wheelchair lift"
....
    <item>
      <title>1999 safari GMC van with wheelchair lift</title>
      <link>https://www.kijiji.ca/v-travel-trailer-camper/vancouver/1999-safari-gmc-van-with-wheelchair-lift/1430028981</link>
      <description>GMC van with lift for handycap</description>
      <pubDate>Fri, 26 Apr 2019 23:33:07 GMT</pubDate>
      <guid>https://www.kijiji.ca/v-travel-trailer-camper/vancouver/1999-safari-gmc-van-with-wheelchair-lift/1430028981</guid>
      <dc:date>2019-04-26T23:33:07Z</dc:date>
      <geo:lat>49.2819588</geo:lat>
      <geo:long>-123.09482930000001</geo:long>
    </item>
...

Уууууууу, ты так прав! Я предполагал, что есть изображение (item.enclosure), а когда его нет, оно ломается. Спасибо, что нашли время, чтобы прочитать это! Это исправило мою проблему: items.map(item => { item.enclosure ? posts.push(item.enclosure.$.url) : posts.push(item.enclosure); })

ztrat4dkyle 03.05.2019 20:28

Другие вопросы по теме