循环遍历 xml2js-parsed json 的项目时无法访问 xml 属性
Cannot access xml attributes when looping over items of xml2js-parsed json
在使用 xml2js. I can access individual attributes 使用 [=14] 将 xml 解析为 json 之后,我正在尝试访问 xml rss 提要中项目的属性=].但是,如果我遍历每个项目,我不能比 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
更深入。
我在这里错过了什么?
运行 本地示例,我看到带有 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>
...
在使用 xml2js. I can access individual attributes 使用 [=14] 将 xml 解析为 json 之后,我正在尝试访问 xml rss 提要中项目的属性=].但是,如果我遍历每个项目,我不能比 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
更深入。
我在这里错过了什么?
运行 本地示例,我看到带有 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>
...