xml2jsを使用してxmlがjsonに解析された後、xmlrssフィード内のアイテムの属性にアクセスしようとしています。私がアクセスできる個々の属性を使用して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);
});
上記の例では、xml2jsを使用してkijijiでこのRSSフィードを解析しています。解析後、を使用して要素属性にアクセスできます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>
...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加