【问题标题】:fast-xml-parser incorrect parse arrayfast-xml-parser 解析数组不正确
【发布时间】:2019-03-19 09:02:47
【问题描述】:

我遇到了解析器错误地转换数组的问题。

数组创建代码(查看DocFiles):

documents.push({
  // Document fields...
  DocFiles: []
});

for (const file of files) {
  documents[documents.length - 1].DocFiles.push({ File: file });
}

或者:

documents.push({
  // Document fields...
  DocFiles: files.map(file => ({ File: file }))
});

数组得到如下形式:

documents: [
  {
    DocFiles: [
      { File: Object },
      { File: Object },
      { File: Object }
  },
  {
    DocFiles: [
      { File: Object },
      { File: Object },
      { File: Object }
  }
]

我想在 DocFiles 节点的每个文档中得到什么:

<DocFiles>
    <File>{fileNodes}</File>
    <File>{fileNodes}</File>
    <File>{fileNodes}</File>
</DocFiles>

我得到了什么:

<DocFiles>
    <File>{fileNodes}</File>
</DocFiles>
<DocFiles>
    <File>{fileNodes}</File>
</DocFiles>
<DocFiles>
    <File>{fileNodes}</File>
</DocFiles>

我做错了什么?

  • 解析器选项:
const options = {
  attributeNamePrefix: '@_',
  attrNodeName: '@',
  textNodeName: '#text',
  ignoreAttributes: true,
  cdataTagName: '__cdata',
  cdataPositionChar: '\\c',
  format: true,
  indentBy: '    ',
  supressEmptyNode: true,
  tagValueProcessor: a => a,
  attrValueProcessor: a => a
}
  • 解析和编写代码:
for (const document of documents) {
  const parent = { Nomenclature: document };
  const fileName = `${Date.now().toString()}.xml`;
  const Parser = xml.j2xParser;
  const parser = new Parser(options);
  const value = await parser.parse(parent);

  await fs.writeFileSync(path.join(dir, fileName), value);
}
  • 解析前:

  • 解析结果:

【问题讨论】:

  • 您应该在此处复制粘贴您的代码,而不是使用图像。即使图像被关闭,它也会保留在那里,我们不必点击打开它们......
  • 好的,我改变了问题
  • @SergeySovgut 如果您的问题已解决,您可以接受答案。

标签: javascript arrays node.js


【解决方案1】:

我找到了解决办法...

documents.push({
  // Document fields...
  DocFiles: {
    DocFile: files.map(file => file)
  }
});

感谢您的帮助:)

【讨论】:

    【解决方案2】:
    documents.push({
      // Document fields...
      DocFiles: files.map(file => ({ File: file }))
    });
    

    在本例中,您使用 DockFiles 属性推入一个新对象。此对象中的一个数组。

    也许你会试试这个,你的问题会得到解决。

    documents['DocFiles'] = files.map(file => ({ File: file }))
    

    【讨论】:

    • 感谢您的回答,不幸的是,这个解决方案不起作用,因为文档是一个数组,并且在这个数组的每个单元格中都有一个 DocFiles 属性,它也是一个数组,我需要已经将文件放入其中
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多