Je lis un fichier XML et l'envoie à une API REST. Cependant, avant de l'envoyer, je voudrais modifier certaines valeurs.

Voici comment j'envoie les données :

data = await readFile(path.resolve(__dirname, file), 'utf8');
const config = {
    headers: {
        'Content-Type': 'text/plain',
        'Content-Length': data.length,
    },
};
result = await axios.post(
    'https://someRestapi.com/',
    data, config,
);

Et je veux changer le nom Simon en Zimon dans le nom de l'auteur par exemple.

<?xml version="1.0" encoding="UTF-8"?>
<Document schemaVersion="12" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Author>
    <Name>
        <First>Simon</First>
        <Second>SomeName</Second>
    </Name>
 </Author>
</Document>

Existe-t-il une solution simple pour le faire ?

1
zlZimon 9 oct. 2020 à 18:38

1 réponse

Meilleure réponse

J'ai dû faire quelque chose de similaire récemment et j'ai fini par utiliser fast-xml-parser. Appliqué à votre cas, vous pourriez faire :

const xmlString = `<?xml version="1.0" encoding="UTF-8"?>
<Document schemaVersion="12" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Author>
    <Name>
        <First>Simon</First>
        <Second>SomeName</Second>
    </Name>
 </Author>
</Document>`;

const xmlToJsonParser = require('fast-xml-parser');
const J2xParser = require("fast-xml-parser").j2xParser;

const tObj = xmlToJsonParser.getTraversalObj(xmlString,{ignoreAttributes :false});
const jsonObj = xmlToJsonParser.convertToJson(tObj,{ignoreAttributes :false});

jsonObj.Document.Author.Name.First = "Zimon";

let result = new J2xParser({format:true, ignoreAttributes :false}).parse(jsonObj);
result = `<?xml version="1.0" encoding="UTF-8"?>\n${result}`;
console.log(result);

Cela imprimera:

<?xml version="1.0" encoding="UTF-8"?>
<Document schemaVersion="12" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Author>
    <Name>
      <First>Zimon</First>
      <Second>SomeName</Second>
    </Name>
  </Author>
</Document>
1
eol 9 oct. 2020 à 16:00