Как в node.js обрабатывать большие xml файлы?

Пользователь

от miguel_ritchie , в категории: JavaScript , 6 месяцев назад

Как в node.js обрабатывать большие xml файлы?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jedidiah.brown , 6 месяцев назад

@miguel_ritchie 

В Node.js существует несколько способов обработки больших XML файлов:

  1. SAX парсер: Используя SAX (Simple API for XML) парсер, вы можете парсить XML файл постепенно, обрабатывая каждый узел при его обнаружении. Каждый узел будет представлен как событие, и вы можете подписаться на события, чтобы выполнить нужные действия. SAX парсер работает в реальном времени, что позволяет обрабатывать большие файлы без загрузки всего документа в память.


Пример использования SAX парсера:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
const fs = require('fs');
const sax = require('sax');

const saxStream = sax.createStream(true); // true заставляет парсер распознавать сущности

saxStream.on('opentag', (node) => {
    console.log('Открыт тег: ', node.name);
});

saxStream.on('closetag', (tagName) => {
    console.log('Закрыт тег: ', tagName);
});

const xmlStream = fs.createReadStream('large.xml')
xmlStream.pipe(saxStream);


  1. Streaming парсеры: При помощи библиотеки xml-stream вы можете создать парсер, который будет парсить XML документ потоково. По аналогии с SAX парсером, этот подход позволяет обрабатывать большие файлы без загрузки всего документа в память.


Пример использования xml-stream:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const fs = require('fs');
const XmlStream = require('xml-stream');

const xmlStream = fs.createReadStream('large.xml');
const stream = new XmlStream(xmlStream);

stream.on('endElement: tagName', (node) => {
    console.log('Закрыт тег: ', node.$text);
});

stream.on('textNode: tagName', (text) => {
    console.log('Текст внутри тега: ', text);
});


  1. Использование библиотеки xml2js: Эта библиотека позволяет преобразовать XML документ в JavaScript объект или JSON структуру. Она может работать со всеми файлами, но целесообразно использовать ее для обработки небольших XML файлов.


Пример использования xml2js:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const fs = require('fs');
const xml2js = require('xml2js');

const xmlString = fs.readFileSync('large.xml', 'utf-8');

xml2js.parseString(xmlString, (err, result) => {
    if (err) {
        console.error(err);
    } else {
        console.log(result);
    }
});


Каждый из этих подходов может быть выбран в зависимости от ваших конкретных потребностей и размера XML файла, который вам нужно обработать.