nodejs xml流返回的项目数量少于实际xml中的数量

时间:2019-05-25 19:39:23

标签: node.js

我正在尝试将从url获得的rss feed解析为json。我已经以这种方式实现了xml-stream

class FromStreamableXML extends Parser {
  constructor() {
    super('xmlStream');
  }

  setupRequestStream(link) {
    return new Promise((resolve, reject) => {
      const req = request(link, res => {
        resolve(res);
      });
      req.on('error', err => {
        reject(err);
      });
      req.end();
    });
  }

  setupFileStream(path) {
    return Promise.resolve(createReadStream(path));
  }

  async toJs({ path, itemToSelect, identifier, type }) {
    let streamSource;
    if (type === 'url') {
      streamSource = this.setupRequestStream;
    } else if (type === 'file') {
      streamSource = this.setupFileStream;
    }
    const itemsMap = {};
    const items = [];
    const stream = await streamSource(path);
    const myXML = new this.xmlStream(stream);

    return new Promise((resolve, reject) => {
      myXML.on(`endElement: ${itemToSelect}`, item => {
        if (identifier) {
          if (!itemsMap[identifier]) {
            itemsMap[identifier] = [];
          }
          itemsMap[identifier].push(item);
        } else {
          items.push(item);
        }
      });
      myXML.on('end', () => {
        if (identifier) {
          resolve(itemsMap);
        } else {
          resolve(items);
        }
      })
    });
  }
}

我使用toJs方法收集所有item属性,然后在end上解析收集的项目。但是,情况是xml-stream不能收集所有项目,事实上,它收集的项目数是随机的。例如,某个URL包含200个项目,但是,有时我会收到53,有时是15。我通过在endElement回调中记录该项目来进行检查。

当前,我使用url进行了测试,因此我正在使用请求流。 request方法来自https模块。

任何想法为什么会这样?

0 个答案:

没有答案