【发布时间】:2019-09-22 07:29:06
【问题描述】:
在使用xml2js 将 xml 解析为 json 之后,我正在尝试访问 xml rss 提要中项目的属性。我可以使用items[0].el.$.attribute 访问individual attributes。但是,如果我遍历每个项目,我将无法比el 更深入。尝试深入循环(使用items.map(item => { item.el.$ }))会给我一个错误,其中 el 现在未定义...
TypeError: Cannot read property '$' of undefined
这是[DEMO] 和我的代码 (╭ರ_•́)
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);
});
在上面的示例中,我正在使用 xml2js 解析这个 rss feed on kijiji。解析后,我可以使用json.rss.channel.item[0].enclosure.$.url 访问元素属性。
但是,如果我循环遍历这些项目(使用 for 循环、forEach 或 map),我无法比 json.rss.channel.item[0].enclosure 更深入。
我在这里错过了什么?
【问题讨论】:
标签: javascript node.js json xml-parsing xml2js