Я новичок в Node JS Stream и не знаю, правильно ли я его использую. Проблема У меня есть структура каталогов внутри, у меня есть подпапка, которая имеет кучу XML файла. Например, внутри у меня есть файл 50 xml или может быть больше. Я перебираю все подпапки и читаю все файлы xml. Для этого я использую NodeJS Stream. ниже два усеченных xml файла. Я использую пакет xml - js npm для преобразования содержимого объекта xml в js.
Файл 1 -
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root
xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
description="Lorem Ipsum"
title="Lorem Ipsum Title">
<sub-item
type="string"
description="Lorem Ipsum" />
</jcr:root>
Файл 2-
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root
xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
description="Lorem Ipsum 2"
title="Lorem Ipsum Title Two">
<sub-item
type="string"
description="Lorem Ipsum Sub Item" />
</jcr:root>
Вот мой NodeJS Код
// file = it is a variable that hold an array of all the xml file,
For Eg: - [file1.xml, file2.xml]
// Using xml-js npm package to convert XML to JS Object
let d = {
data: []
};
for (let i = 0; i < file.length; i++) {
const streamXMLFile = fs.createReadStream(file[i]);
streamXMLFile.on('data', (chunk) => {
d.data.push(chunk.toString());
});
streamXMLFile.on('end', () => {
const result = convert.xml2js(d.data, {compact: true, spaces: 4});
const attributes = result["jcr:root"] ? result["jcr:root"]: '';
console.log("a", attributes);
});
}
Фактический результат
// Data that is returning is coming as it own Object For Eg Like below
a {
_attributes : {
'xmlns:sling': 'http://sling.apache.org/jcr/sling/1.0',
'xmlns:cq': 'http://www.day.com/jcr/cq/1.0',
'xmlns:jcr': 'http://www.jcp.org/jcr/1.0',
'xmlns:nt': 'http://www.jcp.org/jcr/nt/1.0',
description="Lorem Ipsum",
title="Lorem Ipsum Title"
},
'sub-item': {
_attributes: {
type:"string"
description:"Lorem Ipsum"
}
}
}
a {
_attributes : {
'xmlns:sling': 'http://sling.apache.org/jcr/sling/1.0',
'xmlns:cq': 'http://www.day.com/jcr/cq/1.0',
'xmlns:jcr': 'http://www.jcp.org/jcr/1.0',
'xmlns:nt': 'http://www.jcp.org/jcr/nt/1.0',
description="Lorem Ipsum",
title="Lorem Ipsum Title Two"
},
'sub-item': {
_attributes: {
type:"string"
description:"Lorem Ipsum Sub Item"
}
}
}
Ожидаемый результат Необходимо объединить все данные в один массив объекта Как ниже. Я попробовал несколько других вариантов, но не смог попробовать object.assign, но не работает. Не знаю, правильно ли я поступаю или нет.
let Obj = [{
_attributes : {
'xmlns:sling': 'http://sling.apache.org/jcr/sling/1.0',
'xmlns:cq': 'http://www.day.com/jcr/cq/1.0',
'xmlns:jcr': 'http://www.jcp.org/jcr/1.0',
'xmlns:nt': 'http://www.jcp.org/jcr/nt/1.0',
description="Lorem Ipsum",
title="Lorem Ipsum Title"
},
'sub-item': {
_attributes: {
type:"string"
description:"Lorem Ipsum"
}
}
},
{
_attributes : {
'xmlns:sling': 'http://sling.apache.org/jcr/sling/1.0',
'xmlns:cq': 'http://www.day.com/jcr/cq/1.0',
'xmlns:jcr': 'http://www.jcp.org/jcr/1.0',
'xmlns:nt': 'http://www.jcp.org/jcr/nt/1.0',
description="Lorem Ipsum",
title="Lorem Ipsum Title Two"
},
'sub-item': {
_attributes: {
type:"string"
description:"Lorem Ipsum Sub Item"
}
}
}]
Может кто-нибудь? Пожалуйста, покажите мне правильное направление, что я делаю неправильно, и поправьте меня.