J'ai un problème avec l'analyseur qui convertit incorrectement le tableau.

Code de création de tableau (Regardez DocFiles) :

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

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

Ou:

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

Le tableau prend la forme suivante :

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

Ce que je veux obtenir dans chaque document du nœud DocFiles :

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

Ce que j'obtiens:

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

Qu'est-ce que je fais mal?

  • Options de l'analyseur :
const options = {
  attributeNamePrefix: '@_',
  attrNodeName: '@',
  textNodeName: '#text',
  ignoreAttributes: true,
  cdataTagName: '__cdata',
  cdataPositionChar: '\\c',
  format: true,
  indentBy: '    ',
  supressEmptyNode: true,
  tagValueProcessor: a => a,
  attrValueProcessor: a => a
}
  • Analyse et écriture de code :
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);
}
  • Avant l'analyse :

  • Résultat de l'analyse :

1
Sergey Sovgut 19 mars 2019 à 12:02

2 réponses

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

Dans cet exemple, vous insérez un nouvel objet avec la propriété DockFiles. Un tableau dans cet objet.

Peut-être que vous essayerez ceci, votre problème sera résolu.

documents['DocFiles'] = files.map(file => ({ File: file }))
0
Emircan Ok 19 mars 2019 à 09:36

J'ai trouvé une solution...

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

Merci pour ton aide :)

1
Sergey Sovgut 19 mars 2019 à 13:45