Node.js 尝试从Sax JS中获取变量

Node.js 尝试从Sax JS中获取变量,node.js,saxparser,Node.js,Saxparser,我正在使用解析节点中的XML文件。我希望它生成解析文件的对象,但我似乎能做的最好的事情是console.logmy parsed data 我对Node中的流非常陌生。我在谷歌上搜索并尝试了一些东西,但我的基本问题似乎是,我无法掌握从何处开始使用流以及它们与SAX JS的关系 如何将解析后的XML文件从SAX输出到JS对象 补遗 理想情况下,我希望变量中有一个JS对象,但我也很乐意输出JSON文本,我可以将其反序列化为变量 使用SAXJS,我尝试了this.write(JSON.stringif

我正在使用解析节点中的XML文件。我希望它生成解析文件的对象,但我似乎能做的最好的事情是
console.log
my parsed data

我对Node中的流非常陌生。我在谷歌上搜索并尝试了一些东西,但我的基本问题似乎是,我无法掌握从何处开始使用流以及它们与SAX JS的关系

如何将解析后的XML文件从SAX输出到JS对象

补遗 理想情况下,我希望变量中有一个JS对象,但我也很乐意输出JSON文本,我可以将其反序列化为变量

使用SAXJS,我尝试了
this.write(JSON.stringify(val))closetag
事件处理程序的code>,它会产生无数的
错误!错误:结束标记中的字符无效
。我真的不知道我在这里做什么

我已经尝试过xml2js(没有做我需要的),和xml4js(没有维护)。我在xml2js中遇到的一个大问题是,XML的文本在自动关闭标记中包含基本数据,这些标记最终位于不同的键中,与文本完全分离

这是一个XML结构,有点像我需要它来处理的:

<p>The quick brown fox <del>jumps</del> 
over the <lb n="15"/> lazy dog.</p>
结果:

The quick brown fox jumps over the [line 15] lazy [B:325a] dog.
从sax npm中,我们可以看到:

您可以使用它从XML构建一个对象模型,但它不能 那是开箱即用的

也许,您需要重新考虑您的选择,并查看一个可用的替代方案,除非您真的需要流(如果XML文件太大并且不能放入机器内存中)

例如,下面是我们如何使用以下方法构建xml文件的对象表示:

我已经准备好了一份工作


如果文件足够大但适合内存,您可能需要旋转一个子进程来卸载主线程。

谢谢。我来看看。我已经尝试过xml2js(没有做我需要的),和xml4js(没有维护)。我在XML2JS中遇到的一个大问题是,文本包含了自关闭标签中的基本数据,这些标记在不同的键中结束,与文本完全分离。只克隆了RunKIT,并尝试在文本节点的中间添加一个自闭合标签。不幸的是,快速xml解析器会删除子标记后面的所有文本,这绝对不是我需要的行为。@JohnK,RunKit使用3.2.0,但是,3.12.7似乎没有您提到的问题,因为它不会忽略节点文本中子标记后面的所有内容。我也更新了上面的答案。请在有时间时再检查一次。如果您需要将这些自动关闭标签作为文本的一部分,然后,一个可能的解决方案是使用定制的
tagValueProcessor
函数,该函数将确保自动关闭标记保留在文本中,并且不会被删除。我想
快速xml解析器
可能是错误的方法,因为即使是遍历在调用
getTraversalObj
包含
val的值:'thelazydog'上的快速棕色狐狸',
,这意味着从这一点上,确定子标记最初放置的位置实际上是不可行的。我建议您搜索一些npm包,该包生成XML的AST表示,然后以您需要的方式遍历它以获得所需的格式。
The quick brown fox jumps over the [line 15] lazy [B:325a] dog.
const parser = require('fast-xml-parser');
const data = `<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend! <pb n="1"/>  And have a plenty of sleep!</body>
</note>`;
const xmlObj = parser.parse(data, {
    ignoreAttributes: false,
    allowBooleanAttributes: true,
    parseNodeValue: true,
    parseAttributeValue: true
});
console.log('XML object: ', JSON.stringify(xmlObj));
XML object:  {"note":{"to":"Tove","from":"Jani","heading":"Reminder","body":{"#text":"Don't forget me this weekend2!And have a plenty of sleep!","pb":{"@_n":1}}}}