#javascript #jquery #xml #cheerio #queryselector
Вопрос:
Допустим, у меня есть xml-ответ на запрос, который выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/xsl/someExcelSheet.xsl"?>
<events>
<event onair="true">
<type>Live</type>
<title>Nyhederne - 1/1</title>
<airtime>09:30:02.13</airtime>
<id>58529</id>
</event>
<event onair="false">
<type>PrimaryVideo</type>
<title>MTV1</title>
<airtime>09:35:02.13</airtime>
<id>58532</id>
</event>
...
Как я могу использовать cheeriojs
его для извлечения данных из него?
Делал
request(url, (error, response, xml) => {
if (!error amp;amp; response.statusCode == 200) {
const $ = cheerio.load(xml, {
xmlMode: true,
decodeEntities: true,
withStartIndices: false,
withEndIndices: false,
})
и пытаюсь
> $('events')
LoadedCheerio(1) [Element, options: {…}, _root: LoadedCheerio(1), prevObject: LoadedCheerio(1)]
> $('event')
LoadedCheerio(468) [Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, Element, …]
но не мог понять, как с этим работать. Хотел захватить все event
в events
и повторить это и прочитать текст в <type>
<title>
тегах и т. Д.
то, что я в итоге сделал, было
const rows: string[][] = $('event')
.text()
.split(/n/)
.map((str) => str.trim())
.join('n')
.split(/n{2,}/g)
.reduce((acc, str) => [...acc, str.split(/n/)], [])
Но должен быть лучший способ, и я надеюсь, что кто-нибудь захочет мне это объяснить?
Ответ №1:
Что-то вроде этого должно помочь вам начать:
$('event').get().map(event => {
return {
type: $(event).find('type').text(),
title: $(event).find('title').text(),
// more props
}
})