在 Node.js 中解析 XML 文件

Kaa*_*ken 5 javascript xml node.js

我正在使用带有 KDE 等离子的 Arch Linux 系统。我有大约 50mb 的 XML,我需要解析它。该文件具有自定义标签。

示例 XML:

<JMdict>
   <entry>
      <ent_seq>1000000</ent_seq>
      <r_ele>
         <reb>?</reb>
      </r_ele>
      <sense>
         <pos>&unc;</pos>
         <gloss g_type="expl">repetition mark in katakana</gloss>
      </sense>
   </entry>
</JMdict>
Run Code Online (Sandbox Code Playgroud)

我曾尝试提出了Stack Overflow上的许多解决方案,他们并没有在所有的工作,其中一些无法安装到我的系统一样xml-streamxml2json。我决定使用xml2js(他们中的大多数建议使用xml2js),并得到了相同的结果。我怎样才能正确使用它?我正在使用此代码,但它始终返回未定义:

const fs = require('fs-extra');
const xml2js = require('xml2js');
const parser = new xml2js.Parser();

const path = "test.xml";

fs.readFile(path, {encoding: 'utf-8'}, function(error, data) {
     parser.parseString(data, function(err, res) {
         console.log(res);
     });
});

Result: Undefined
Run Code Online (Sandbox Code Playgroud)

有没有办法手动处理 XML 文件(没有包)?

RGK*_*183 5

答案位于工作示例链接下方

var fs = require('fs'),
slash = require('slash'),
xml2js = require('xml2js');

var parser = new xml2js.Parser();

let filename = slash(__dirname+'/foo.xml');

// console.log(filename);

fs.readFile(filename,  "utf8", function(err, data) {

    if(err) {
        console.log('Err1111');
        console.log(err);
    } else {
        //console.log(data);
        // data.toString('ascii', 0, data.length)

        parser.parseString(data.replace(/&(?!(?:apos|quot|[gl]t|amp);|#)/g, '&amp;'), function (err, result) {
            if(err) {
                console.log('Err');
                console.log(err);
            } else {
                console.log(JSON.stringify(result));
                console.log('Done');
            }            
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

确切地说,您必须执行以下操作:

data.replace(/&(?!(?:apos|quot|[gl]t|amp);|#)/g, '&')

问题仅出现在标签下方&unc;

<pos>&unc;</pos>
Run Code Online (Sandbox Code Playgroud)

参考并感谢@tim