Я пытаюсь получить доступ к атрибутам элементов в канале 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.log(items[0].enclosure.$.url)
// THIS DOES NOT WORK... ಠ_ಠ
items.map(item => {
console.log(item.enclosure.$.url);
})
// THIS WORKS! (╯°o°)╯
items.map(item => {
console.log(item.enclosure);
})
})
})
})
// listen for requests :)
const listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' + listener.address().port);
});
В приведенном выше примере я разбираю этот rss канал на kijiji , используя xml2js. После анализа я могу получить доступ к атрибутам элемента, используя json.rss.channel.item[0].enclosure.$.url
.
Однако, если я перебираю предметы (используя петлю for
, forEach
или map
), я не могу получить более глубокое значение, чем json.rss.channel.item[0].enclosure
.
Что мне здесь не хватает?