将大型 XML 文件 (1.8GB) 解析为 JSON

问题描述 投票:0回答:1

我试图在我的节点项目中将 XML 文件解析为 JSON 文件。为了解析较小的文件,我一直使用“fast-xml-parser”。

我现在处理的文件要大得多,实际上大到超出了可用内存。由于这个问题,我必须使用支持管道的解析器。我在网上查看并找到了一个名为“sax”的,但据我所知,它不会解析为 JSON。

我尝试将“fast-xml-parser”放入“sax”提供的侦听器中,如下所示:

import fs from 'fs';
import sax from 'sax';
import { XMLParser, X2jOptionsOptional } from 'fast-xml-parser';

const parserOptions: X2jOptionsOptional = {
    ignoreDeclaration: true,
    ignoreAttributes: false,
    removeNSPrefix: true,
    attributeNamePrefix : "",
    transformTagName: (tagname) => camelize(tagname),
    transformAttributeName: (attributeName) => camelize(attributeName),
    updateTag: (tagName, jPath, attrs) => {
        if (tagName == 'placemark') return 'placemarks';
        if (tagName == 'timeStep') return 'timesteps';
    }
}

const parser = new XMLParser(parserOptions)

const saxStream = sax.createStream(false, {
    trim: false,
    lowercase: true,
    xmlns: true,
    position: false
})

saxStream.on('data', (data) => {
    const parsed = parser.parse(data)
    fs.writeFileSync('src/forecast/forecast.json', JSON.stringify(parsed))
})

当使用上面的监听器时,第一块数据被解析并放入json文件,之后,抛出一个错误:

Cannot read properties of undefined (reading 'addChild')

有人知道如何将数据块解析为一个 JSON 文件吗?

node.js json xml parsing large-files
1个回答
0
投票

Node.js 不幸的是没有很好地提供 XML 工具。您可以使用 sax.js 解析器,但它涉及一些低级编程,它肯定不会处理到 JSON 的转换,您需要自己编程。

这个工作真的需要在node.js下运行吗?如果您能够在 Java 或 C# 下运行,您可以编写流式 XSLT 3.0 转换并使用 Saxon-EE [免责声明:我公司的产品] 运行它。在 node.js 下运行的 SaxonJS 产品不提供流式传输。

您可以考虑的另一种可能性是使用 sax.js 将大文件拆分为许多小的 XML 文件,然后使用非流式实用程序(例如 fast-xml-parser)处理这些文件。

© www.soinside.com 2019 - 2024. All rights reserved.