我目前正在编写一个Node.js脚本,该脚本涉及使用xml2js库解析XML文件.该脚本读取一个XML文件,提取特定元素,并使用xml2js.Builder()构建一个新的XML输出.

该脚本非常适合简单的XML struct .然而,当我遇到具有嵌套元素、<customs>元素的XML文件时,它抛出了Invalid character in name错误.

const fs = require('fs');
const xml2js = require('xml2js');
const XmlStream = require('xml-stream');

const stream = fs.createReadStream('./test.xml');
const xmlStream = new XmlStream(stream);
const builder = new xml2js.Builder();

const MAX_ITEMS = 1;
let lists = [];
let listCount = 0;

xmlStream.on('endElement: list', function (item) {
  if (listCount < MAX_ITEMS) {
    lists.push(item);
    listCount++;
  } else {
    stream.destroy();
  }
});

stream.on('close', function () { 
   const outputXml = builder.buildObject({ lists: { list: lists } });
   console.log(outputXml);
});

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<lists>
  <list list-id="0001">
    <first-name>first-name-1</first-name>
    <last-name>second-name-1</last-name>
    <customs>
      <custom attribute-id="gender">female</custom>
    </customs>
  </list>
  <list list-id="0002">
    <first-name>first-name-2</first-name>
    <last-name>second-name-2</last-name>
    <customs>
      <custom attribute-id="gender">male</custom>
    </customs>
  </list>
</lists>

为什么在处理xml2js中的嵌套元素时会出现此错误,以及如何修复该错误?

推荐答案

xml-stream的默认文本属性是$text,而xml2js的构建器是_,这就是它抱怨的原因,所以它会发生在具有属性的元素上,而不是嵌套的元素上.

因此,try 添加$text作为charkey选项:

const builder = new xml2js.Builder({charkey: '$text'});

Node.js相关问答推荐

DocuSign:调用createEntaine时,RequestJWTApplicationToken返回401 AUTHORIZATION_INVALID_TOKEN

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

在Android Studio中react 本机构建失败:未正确检测到Node.js版本

为什么在导出的函数中调用node-sqlite3中的数据库方法时不起作用?

Node js 处理回调和 Promise

如何在Node.js的telegraf.js命令中添加参数?

未捕获的错误: 只能用作 元素的子元素,永远不会直接呈现.请将您的 包裹在

如何解决这个关于 TaskRunner 的 Node/Express 代码问题?

Zod 模式中的self 数组

TypeError:changeChecked 不是函数

突然 React 无法执行create-react-app命令.为什么会发生这种情况,我该如何解决?

node.js 中 pdfkit-tables 中的垂直线

如何更改NodeJS中的堆栈大小限制?

npm package.json 操作系统特定脚本

Mongoose - 保存字符串数组

node --experimental-modules,请求的模块不提供名为的导出

NPM:为什么要安装这个包?

如何从 find 方法返回 Mongoose 结果?

node.js 示例

用于轻松部署和更新的 Node.js 设置