При парсинге файла xml2js выдает Undefined. Что не так?

Хочу переформатировать файл из xml в json средствами nodeJS.

const fs = require('fs');
const xml2js = require('xml2js');
const util = require('util');

const parser = new xml2js.Parser();

fs.readFile('sez.xml', (err, data) => {
    parser.parseString(data, (err, result) => {
        console.log(util.inspect(result, false, null, true));
    });
});

Запускаю код из терминала командой:

node xml2json.js

Выдает

undefined

Что я делаю не так? Файл лежит в папке с скриптом. Может я неверно указываю путь?

введите сюда описание изображения


Ответы (1 шт):

Автор решения: SilverF0x-web

В общем выяснилось, что в входном файле не должно быть лишних \n, \t и т.д., в случае если убрать все лишние символы, то все отрабатывает отлично.

const parser = require('xml2js');
const util = require('util');

const xmlToParse = `
<channel>
<title>Новости</title>
<link>https://sezinnopolis.ru</link>
<description></description>
<lastBuildDate>Thu, 28 Oct 2021 13:46:15 +0300</lastBuildDate>
<ttl>60</ttl>
    <item>
        <id>4054</id>
        <title>На площадке ОЭЗ «Иннополис» при участии технопарка «Сколково» состоялась конференция Adventure Land Conf_Innopolis edition.</title>
        <link>https://sezinnopolis.ru/novosti/na-ploshchadke-oez-innopolis-pri-uchastii-tekhnoparka-skolkovo-sostoyalas-konferentsiya-adventure-la/</link>
        <description></description>
        <preview_text></preview_text>
        <detail_text>На площадке ОЭЗ «Иннополис» при участии технопарка «Сколково» состоялась конференция Adventure Land Conf_Innopolis edition.&nbsp; Ключевая цель -&nbsp; создания эффективного доступа к венчурному капиталу для стартап-комьюнити и дальнейшему выходу успешных стартапов к глобальному венчурному рынку.&nbsp; На конференции&nbsp; &nbsp;собрались перспективные стартап-команды и более 70 профессиональных экспертов венчурного рынка: бизнес-ангелы, представители венчурных&nbsp; фондов, основатели и участники инвестиционных синдикатов и сообществ, акселераторов, начинающие частные инвесторы. В конференции приняли участие лидеры венчурных сообществ, таких как: ANGELS DECK , PULSAR VC , VEB VENTURES, АК БАРС БАНК, STARTA VENTURES,&nbsp; STARTUP LAB , STARTECH VC, BESTSELLER COMPANY, ФРИИ, СБЕР, ТОЧКА БАНК и другие. В рамках панельной дискуссии, модератором которой выступил Василий Кузнецов,&nbsp; партнер венчурного фонда Starta VC, эксперты обсудили инструменты и форматы работы со стартапами ранних стадий. Во второй части конференции состоялась питч-сессия&nbsp; в рамках&nbsp; 14-го&nbsp; экспертного совета по стартапам ОЭЗ «Иннополис». Ярким аккордом стал объявление одного&nbsp; из&nbsp; стартапов&nbsp; &nbsp;-&nbsp; UseTech,&nbsp; &nbsp;о&nbsp; привлечении $11,3 млн инвестиций для развития своего продукта. По итогам питч-сессии было проведено 25 персональных встреч со стартапами а&nbsp; дискуссии экспертов и живое общение завязавшееся в деловой части, продолжилось и в кулуарах. Эксперты, инвесторы, бизнес-ангелы дали стартап-командам ценные советы и рекомендации по доработке проектов и проведению презентаций.</detail_text>
        <enclosure url="https://sezinnopolis.ru/upload/iblock/e6c/5bjyvskwhu748i0lv46lzb8sk04l12m5.jpg" length="17413812" type="image/jpeg"/>
        <pubDate>Thu, 28 Oct 2021 00:00:00 +0300</pubDate>
    </item>
</channel>`;
parser.parseString(xmlToParse, function (err, result){
    console.log(util.inspect(result, false, null, true));
});

На выходе получаем такое:

{
  channel: {
    title: [ 'Новости' ],
    link: [ 'https://sezinnopolis.ru' ],
    description: [ '' ],
    lastBuildDate: [ 'Thu, 28 Oct 2021 13:46:15 +0300' ],
    ttl: [ '60' ],
    item: [
      {
        id: [ '4054' ],
        title: [
          'На площадке ОЭЗ «Иннополис» при участии технопарка «Сколково» состоялась конференция Adventure Land Conf_Innopolis edition.'
        ],
        link: [
          'https://sezinnopolis.ru/novosti/na-ploshchadke-oez-innopolis-pri-uchastii-tekhnoparka-skolkovo-sostoyalas-konferentsiya-adventure-la/'
        ],
        description: [ '' ],
        preview_text: [ '' ],
        detail_text: [
          'На площадке ОЭЗ «Иннополис» при участии технопарка «Сколково» состоялась конференция Adventure Land Conf_Innopolis edition.  Ключевая цель -  создания эффективного доступа к венчурному капиталу для стартап-комьюнити и дальне
йшему выходу успешных стартапов к глобальному венчурному рынку.  На конференции   собрались перспективные стартап-команды и более 70 профессиональных экспертов венчурного рынка: бизнес-ангелы, представители венчурных  фондов, основател
и и участники инвестиционных синдикатов и сообществ, акселераторов, начинающие частные инвесторы. В конференции приняли участие лидеры венчурных сообществ, таких как: ANGELS DECK , PULSAR VC , VEB VENTURES, АК БАРС БАНК, STARTA VENTURE
S,  STARTUP LAB , STARTECH VC, BESTSELLER COMPANY, ФРИИ, СБЕР, ТОЧКА БАНК и другие. В рамках панельной дискуссии, модератором которой выступил Василий Кузнецов,  партнер венчурного фонда Starta VC, эксперты обсудили инструменты и форма
ты работы со стартапами ранних стадий. Во второй части конференции состоялась питч-сессия  в рамках  14-го  экспертного совета по стартапам ОЭЗ «Иннополис». Ярким аккордом стал объявление одного  из  стартапов   -  UseTech,   о  привле
чении $11,3 млн инвестиций для развития своего продукта. По итогам питч-сессии было проведено 25 персональных встреч со стартапами а  дискуссии экспертов и живое общение завязавшееся в деловой части, продолжилось и в кулуарах. Эксперты
, инвесторы, бизнес-ангелы дали стартап-командам ценные советы и рекомендации по доработке проектов и проведению презентаций.'
        ],
        enclosure: [
          {
            '$': {
              url: 'https://sezinnopolis.ru/upload/iblock/e6c/5bjyvskwhu748i0lv46lzb8sk04l12m5.jpg',
              length: '17413812',
              type: 'image/jpeg'
            }
          }
        ],
        pubDate: [ 'Thu, 28 Oct 2021 00:00:00 +0300' ]
      }
    ]
  }
}

В общем заранее нужно готовить необходимо xml файл, парсить сайт и напрямую пихать в xml2js вряд ли получится.

→ Ссылка