我目前正在编写一个Node.js脚本,其中涉及使用xml2js库解析XML文件。该脚本读取XML文件,提取特定元素,并使用xml2js.Builder()构建新的XML输出。
对于简单的XML结构,该脚本工作得非常好。但是,当我遇到包含嵌套元素(<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中处理嵌套元素时会发生此错误以及如何修复此错误?
1条答案
按热度按时间jgovgodb1#
xml-stream
的默认文本属性是$text
,而xml2js
builder的默认文本属性是_
,这就是为什么它会抱怨,所以它发生在具有属性的元素上,而不是嵌套元素上。因此,尝试添加
$text
作为charkey
选项: