@Sashqa

Как рекурсивно преобразовать объект в xml?

Есть такой объект:

let objXML = {
  InsuranceCompany: 'NAME',
  UsageStart: '2019',
  VehicleYear: '2019',
  Mark: 'audi',
  Model: 'a6',
  Modification: {
    Power: '180',
  }
}

Мне нужно перебрать его и на его основе составить xml:

<ns1:UsageStart>2018-09-04</ns1:UsageStart>
<ns1:VehicleYear>2019</ns1:VehicleYear>
<ns1:Mark>AUDI</ns1:Mark>
<ns1:Model>A6</ns1:Model>
<ns1:Modification>
    <ns1:Power>180</ns1:Power>
</ns1:Modification>

Попробовал сделать таким образом:

let xml = '';
const parseXML = (obj) =>
  Object.assign({}, ...Object.entries(obj).map(([ key, value ]) =>
    {
      if(value instanceof Object)  {
        parseXML(value)
      } else {
        xml += `<ns1:${key}>${value}</ns1:${key}>`
      }
    }
));
parseXML(objXML);

Но получаю немного не то, что нужно - теряется Modification:

<ns1:InsuranceCompany>NAME</ns1:InsuranceCompany>
<ns1:UsageStart>2019</ns1:UsageStart>
<ns1:VehicleYear>2019</ns1:VehicleYear>
<ns1:Mark>audi</ns1:Mark>
<ns1:Model>a6</ns1:Model>
<ns1:Power>180</ns1:Power>

Как поправить?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const createXML = obj => Object
  .entries(obj)
  .map(([ k, v ]) => `<ns1:${k}>${v instanceof Object ? createXML(v) : v}</ns1:${k}>`)
  .join('');

UPD. Если нужны переносы строк и отступы, то

const createXML = (obj, tabSize = 2, depth = 0) => {
  const indent = ' '.repeat(tabSize * depth);
  return Object.entries(obj).map(([ k, v ]) =>
    indent +
    `<ns1:${k}>${
      v instanceof Object
        ? `\n${createXML(v, tabSize, depth + 1)}\n${indent}`
        : v
    }</ns1:${k}>`
  ).join('\n');
};
Ответ написан
Комментировать
Robur
@Robur
Знаю больше чем это необходимо
Теряется потому что вы его никуда не добавляете - просто начинаете обрабатывать ключи
{
        xml += `<ns1:${key}>${value instanceof Object ? parseXML(value) : value }</ns1:${key}>`
 }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы