Все доброго времени суток.
Подскажите куда копать, а то так и не пойму.
Задача:
Есть 2 XML файла примерно одинакового содержания, различные только параметры, возможно каких-то свойств нет. Нужно сравнить эти type'ы по названиям, lifetime и т.п (список свой, настраиваемый). И записать в документ.
Примеры:
1-ый файл
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<types>
<type name="ACOGOptic">
<nominal>15</nominal>
<lifetime>7200</lifetime>
<restock>1800</restock>
<min>8</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="weapons"/>
<usage name="Military"/>
</type>
<type name="AK101">
<nominal>5</nominal>
<lifetime>10800</lifetime>
<restock>1800</restock>
<min>2</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="1" count_in_hoarder="1" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="weapons"/>
<usage name="Military"/>
<value name="Tier4"/>
</type>
<type name="AK101_Black">
<nominal>0</nominal>
<lifetime>10800</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
<category name="weapons"/>
</type>
2-ой файл
<type name="ACOGOptic">
<nominal>15</nominal>
<lifetime>17200</lifetime>
<restock>11800</restock>
<min>3</min>
<quantmin>-1</quantmin>
<quantmax>-2</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="weapons"/>
<usage name="Military"/>
</type>
<type name="AK101">
<nominal>5</nominal>
<lifetime>10800</lifetime>
<restock>1800</restock>
<min>2</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="1" count_in_hoarder="1" count_in_map="0" count_in_player="0" crafted="0" deloot="0"/>
<category name="weapons"/>
<usage name="Military"/>
<value name="Tier4"/>
</type>
<type name="AK101_Black">
<nominal>0</nominal>
<lifetime>10600</lifetime>
<restock>0</restock>
<min>1</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="1" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
<category name="weapons"/>
</type>
<type name="AK101_Green">
<nominal>0</nominal>
<lifetime>12800</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
<category name="weapons"/>
</type>
Спарсить из XML в JSON я смог. Смог определить какие имена есть, а каких нет. А вот как по другим параметрам сравнить я так и не могу понять.
Собственно код:
static comareFiles(newFile, oldFile) {
// Первый файл
var newFileCompare = this.compareFile(newFile);
var newFileCompareParse = JSON.parse(newFileCompare);
var newFileCompareParse = newFileCompareParse.types.type;
// Второй файл
var oldFileCompare = this.compareFile(oldFile);
var oldFileCompareParse = JSON.parse(oldFileCompare);
var oldFileCompareParse = oldFileCompareParse.types.type;
newFileCompareParse.forEach((element, count) => {
let searchName = element.attributes.name;
// Сравнение по именам
let nameSearching = oldFileCompareParse.find(
(oldFile) => oldFile.attributes.name === searchName
);
if (!nameSearching) {
console.log("Не найдено: " + element.attributes.name);
}
});
}
Пример JSON после парсинга:
[
{
attributes: { name: 'AKM' },
lifetime: { text: 10800 },
restock: { text: 1800 },
quantmin: { text: -1 },
quantmax: { text: -1 },
cost: { text: 100 },
flags: { attributes: [Object] },
category: { attributes: [Object] }
},
{
attributes: { name: 'AKS74U' },
lifetime: { text: 10800 },
restock: { text: 1800 },
quantmin: { text: -1 },
quantmax: { text: -1 },
cost: { text: 100 },
flags: { attributes: [Object] },
category: { attributes: [Object] }
}
]
Подскажите пожалуйста примерный алгоритм. Заранее спасибо!)