xml-flow NPM 包 - 意外的 XML 解析行为

2023-12-08

背景

我在用xml-flownpm 包使用流解析 XML。问题是 xml 节点以意外的方式进行解析。

我的目的是使用重复的 xml 节点解析一个巨大的 XML 文件。 XML 文件可以是任何 URL,重复节点将从 UI 提供。

我尝试使用具有所有可能值的选项,但解析行为似乎没有改变。

示例代码

我使用了以下示例 XML -

<list>
    <item>
        <details>
            <id>1</id>
        </details>
    </item>
    <item>
        <details>
            <id>2</id>
            <description>description for item 2</description>
        </details>
    </item>
</list>

我尝试使用解析它item作为重复节点如下 -

const fs = require("fs");
const flow = require("xml-flow");

const xmlStream = flow(fs.createReadStream("./sample.xml"));

xmlStream.on('tag:item', function (person) {
    console.log(JSON.stringify(person, null, 4));
});

我得到了以下 2 个已解析 xml 节点的响应 -

// node 1
{
    "$name": "item",
    "details": "1"
}

// node 2
{
    "$name": "item",
    "details": {        
        "id": "2",
        "description": "description for item 2"
    }
}

Problem

正如您在响应中看到的,我为解析的 XML 节点获得了不同的 JSON 结构。

对于第一个 XML 节点,<id>节点没有出现在 JSON 对象中(与第二个 XML 节点不同),因为它的父节点即。<details>只有一个子节点,即。<id>.

这导致我的应用程序出现问题,因为解析的 XML 可能有数千条记录,并且由于这种行为,JSON 结构中到叶节点的相对路径正在发生变化。

例如,如果 xml 文件中有 10000 条记录,第 5000 条记录之后的所有记录都具有节点 2 结构,item.details相对路径将指向记录 1 到 5000 的字符串,而同一路径将指向其余记录的对象。

替代 NPM 包

我确实尝试过使用xml-stream其工作原理相同,但它带来了收集子项目的问题在这里解释这对我来说是更复杂的问题,因为在这种情况下传入的 XML 结构会因文件而异。

如果我需要提供更多信息,请告诉我。

Cheers!


出色地!在完成这些包的实现之后,除非提供明确的支持,否则似乎没有解决此问题的方法(我可能错过了一些东西)。

我最终决定编写一个新的逻辑并最终编写了一个新的 npm 包xtreamer它提供 xml 节点,而不是将它们转换为 JSON 对象。

这个包公开了一个transform stream可以通过管道与任何readable stream。它需要请求中的 xml 节点名称并发出自定义事件xmldata输出 xml 节点。

输出可以插入到任何xml-json npm package根据获取最终 JSON 的要求。检查 npm 包以获取更多详细信息。

支撑模块

我设法又创建了一个 npm 包xtagger它使用sax npm package并提供以下格式的 xml 结构 -

structure: { [name: string]: { [hierarchy: number]: number } };

该包可用于通过考虑其层次结构来查找 xml 文件中的重复节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xml-flow NPM 包 - 意外的 XML 解析行为 的相关文章

  • 尝试附加行谷歌表格API

    我一直在尝试让追加行示例工作几个小时 但没有成功 我没有收到任何错误 但我的电子表格根本没有更新 https developers google com sheets samples writing append values https
  • Passport-Local 和 deSerializeUser 问题的简单身份验证

    阅读此处有关如何在 Passport 流程中反序列化和序列化用户工作的精彩描述后 了解护照序列化反序列化 https stackoverflow com questions 27637609 understanding passport s
  • req.protocol 永远不会在 nginx 代理后面提供 https

    我正在尝试识别我的 Express 应用程序是否通过https协议 Using nginx处理认证和加密 在同一台机器上 并转发请求 req protocol评估为http即使 https 正在使用并且工作正常 我已经尝试了以下两种方法 单
  • 在哪里可以找到 firebase-debug.log 以了解模拟器没有完全关闭的原因?

    我在用firebase emulators start启动 firebase 模拟器 当关闭它时 通过Ctrl C 它告诉我它没有正确关闭 我需要咨询firebase debug log无处可寻 我怀疑它应该位于与云函数相关的所有其他内容所
  • 我无法在项目中使用节点波本威士忌

    我尝试对 scss 文件使用 npm 模块 波本威士忌 我收到以下错误 with function var paths Array prototype slice call arguments return concat apply bou
  • aws-mock-sdk s3.getObject 不起作用

    这是我的 lambda 处理程序 我在其中使用各种 AWS 服务 exports handler function event context var body event var isValidBody validate doValida
  • Mongoose 在结果的 _id 字段中返回“new ObjectId”

    当我尝试查询时 结果包含 id其中包含 new ObjectId 的字段 如何避免这种 new ObjectId 并仅将哈希值包含为字符串 由于此问题 将数据作为 JSON 响应发送回失败 下面是一个基本的demo 我的查询代码 book
  • 护照 Facebook 注销无法使用

    我试图实现 Passport Facebook 我在 server js 中的代码如下所示 用户点击 Facebook 登录时使用的路由 router get auth facebook passport authenticate face
  • 错误:活动导致多个 Skype 活动机器人 FrameWork

    我正在尝试使用主动消息传递将附件发送到频道 下面是我的代码 async function sendToChannelWithImage message channelId img MicrosoftAppCredentials trustS
  • 在本地主机上设置 (https) SSL 以进行流星开发

    如何创建自签名 SSL 证书以在 mac 10 9 上的本地服务器上使用 我需要我的本地主机作为https localhost 我正在使用 linkedin API 这里解释了需要本地主机上的 ssl 的功能 https developer
  • 如何安装 Node 和 NPM 以便不必使用 sudo?

    我正在尝试在 Ubuntu 14 04 计算机上设置 Node js 和 NPM 但遇到了一些问题 在我的第一次尝试中 我不断得到EACCES尝试安装软件包时出错 有时甚至使用sudo 所以我彻底卸载了node和npm 现在我正在尝试找出如
  • 在原子操作中测试和递减?

    我刚刚发现了一个恼人的错误 它基本上是一个竞争条件 为了便于论证 我们假设一个非常简单的文档结构 例如 id XXX amount 100 集合中存在数百个这样的文档 并且由多个编写器访问 这些编写器有效地尝试将数量降低任何值 但绝不会低于
  • Node.js 护照会话 Cookie 域

    我正在使用 node js Passport 并试图弄清楚如何在父域上设置 cookie 以便它可用于子域 用户登录 Domain com 然后用户访问 Sub Domain com 他应该仍然处于登录状态 如何在父域上设置 cookie
  • 使用 Sequelize.js 和 PostgreSQL 查询关联模型上的 JSONB 字段

    我有我的两个模型Foo and Bar Foo有一个字段barId 因此有一个Bar与其关联的对象 我可以查询我所有的Foo对象并包括它们的关联Bar对象如此 我正在使用 TypeScript续集打字稿 https github com R
  • Node.js 连接 createServer 代码

    我正在阅读 Node js Connect 版本 2 15 0 Create a new connect server return Function api public function createServer function ap
  • 节点持久-NodeJS

    谁详细向我解释了如何操作以下说明 var storage require node persist var account username Morris password test storage initSync storage set
  • Electron Auth0Lock“原始文件://不允许”

    尝试让 auth0 与我的电子应用程序一起使用 当我按照默认教程并尝试使用用户名 密码 身份验证进行身份验证时 锁定失败并显示 403 错误 并响应 不允许使用 Origin file 我还在 auth0 仪表板中客户端设置的允许来源 CO
  • NodeJS 和 PHP (Laravel) 集成用于 Socket.IO 实时聊天

    目前我有一个我写过的网站PHP通过Laravel 框架 我已经使用写了一个实时聊天nodeJS with 套接字IO and Express现在我想做的是将它集成到我已经编写的 Laravel 网站中 问题是聊天必须在主页中 当前由 Lar
  • 从另一台服务器读取 Node.js 中的大文件

    我有两台相互通信的服务器 Server1 向 Server2 请求文件的部分内容 并将收到的数据存储到一个文件中 Server2 应该接收每个请求并创建一个流管道传输数据 假设服务器2中存储的文件 目录 如下 bigfile gz bigf
  • 通过条件将 Firebase 云消息传递 (FCM) 发送到多个主题的正确语法是什么

    简而言之 我想使用 Google Cloud Functions 向订阅主题组合的设备发送通知 文档说 主题中的 TopicA 主题中的 TopicB 主题中的 TopicC 我试图做的是 var topicsConditions type

随机推荐

  • Node js - 加密和解密文件

    我想在客户端加密文件并将其发送到服务器端 解密 但是当我使用内置的 Node js 时crypto我收到错误 客户端 js const crypto require crypto const cipher crypto createCiph
  • 为什么 read() 不能在 open() 函数中使用 'w+' 或 'r+' 模式

    当我使用带有 r 或 w 参数的打开时 它不想读取文本文件 内部文本文档 hello Python 代码示例 code with open file name r as o print o read output hello code wi
  • 安装时npm权限错误

    我正在尝试在我的服务器上安装 yeoman 但由于某种原因 我总是收到权限被拒绝的错误 npm install g yo root node bin yo gt root node lib node modules yo cli js gt
  • 上传多个文件并查询 Firestore DB - ReactJS

    我读了很多这样的帖子如何将多个文件上传到 Firebase 之前关于这个问题 我尝试了不同的选择 但无法得到结果 我正在使用 React Hook Form 来创建一个非常巨大的表单 现在我必须添加更多输入 以上传文件 并且需要帮助立即完成
  • 在 C# 中创建 CSV 文件

    我正在尝试创建一个 csv 文件 其中每个条目均由用户输入 输入一组值后 应继续输入下一组值 然而我似乎无法做到这一点 每次我运行该程序时 它都会替换以前的值 using System using System IO using Syste
  • 如何将 3D Python/NumPy 数组保存为文本文件?

    我必须启动大量计算 并且每次都必须保存 2D 文件文本 因此我想将结果 实时 存储为 3D 文本文件 每个切片对应一个计算结果 第一次计算没问题 但是当我进行第二次计算时 在 np loadtxt 步骤中 数组维度变成了二维 所以我无法达到
  • 带有文本文件的实体框架(没有数据库!)

    我习惯了表单和数据集 但现在我正在尝试 WPF 和实体框架 我的目标是使用实体框架填充 WPF 中的 DataGrid 但是 我没有数据库 我有简单的文本文件 其中包含我必须解析以填充我的实体的数据 但是 我收到诸如 实体类型 TableN
  • 比较 Chrome 和 Firefox 的字体大小问题

    我建立了一个网站 问题是 chrome 显示font size 1px比火狐浏览器还大 我尝试了几种方法来匹配字体大小 以 px 为单位指定 以 为单位将正文设置为 100 然后将元素设置为0 875em 这些都不起作用 它仍然在 Chro
  • “应用程序窗口预计有一个根视图控制器”条件外观

    我正在使用 Xcode 4 5 和 iOS6 为 iPhone 编写一个应用程序 我也在创建一个新的UIWindow能够管理状态栏的区域 在那里显示消息等 我正在使用故事板和我的appDelegate方法如下所示 BOOL applicat
  • 在 PHP 中通过电子邮件验证用户

    我实际上正在使用 PHP 创建一个 Web 应用程序并寻求验证用户的帮助 与某些网站一样 当您注册时 系统会向您发送一封包含确认链接的电子邮件 我如何在 PHP 中实现它 我只知道我必须使用 PHPmail 功能发送电子邮件 请帮忙 必要的
  • 将字符串中单词的每个实例加粗

    我试图将字符串中单词的每个实例加粗 并删除字符串中第一个单词实例之前的所有内容 我在用着str replace and stristr 这样做 但输出不符合预期 该单词的第一个实例之前的所有内容都被切断 但当我回显该字符串时 该单词的实例不
  • 任务之外的异常处理

    刚刚注意到奇怪的事情 要从新任务捕获调用者中的异常 lambda 必须标记为异步 即使 delegate 根本没有await 运算符 这真的有必要吗 try Task Run gt exception is not caught Task
  • 检查查询字符串 (PHP)

    例如 我使用查询字符串test php var 1 我如何检查用户之后是否输入任何内容 例如另一个字符串 如果我的后面有任何其他字符串 查询字符串 我尝试重定向到index phpvar请求参数 可以检查这个吗 例如 test php va
  • HTML5 / CSS3 带有部分边框的圆形

    是否可以仅使用 HTML5 CSS3 创建一个圆形 其边框仅围绕圆形一部分 如果没有 我可以使用什么技术来实现这种效果 我更喜欢使用纯 DOM 元素 但如果必须的话 我可以在画布上绘图或旋转 SVG 2023年解决方案 这个方法不需要 JS
  • 如何在 C# 中测试 COM 相关对象

    我正在尝试使用依赖于 COM 接口的对象进行 TDD 我考虑在进行开发测试时模拟 COM 接口 并在集成测试中真正做到这一点 但是 我无法模拟 COM 接口 我尝试使用 Moq 它引发了异常 System TypeLoadException
  • 获取 UINavigationController 向后滑动的进度

    我有两个viewControllers 两者都是UINavigationController From View1我可以点击UITableViewCell并前往View2 from View2我可以滑动返回View1 我想知道如何才能获得此
  • 在 iOS 7 导航栏下添加视图的最佳方法是什么

    在 ios7 上 许多应用程序 Apple Messages Facebook Messenger Calendar 的视图出现在 UINavigationBar 下 通常带有看似标准的动画 因为它看起来很标准并且看起来很像 UIToolB
  • Access2010 中的数据宏:触发器?

    我听说即将推出的 Access2010 具有数据宏功能 该功能将首次向 Access 数据引擎表添加类似触发器的功能 有人有这方面的进一步细节吗 例如 它们可以在代码中创建 ACEDAO SQL DDL 等 吗 如果从 Access 用户界
  • 使用 Process.Start() 和 Windows 任务计划程序时出现异常

    我编写了 C 控制台应用程序 该应用程序有时会尝试使用 7zip 特别是 7za exe 解压缩文件 当我手动运行它时 一切运行正常 但如果我在任务计划程序中设置一个任务并让它运行 它会抛出此异常 System ComponentModel
  • xml-flow NPM 包 - 意外的 XML 解析行为

    背景 我在用xml flownpm 包使用流解析 XML 问题是 xml 节点以意外的方式进行解析 我的目的是使用重复的 xml 节点解析一个巨大的 XML 文件 XML 文件可以是任何 URL 重复节点将从 UI 提供 我尝试使用具有所有