The combination between area and subarea must be unique. You could use the following PowerShell script to identify those duplicates:
using namespace System.Xml;
function Find-DuplicateSubareaIdsInSitemap() {
PARAM(
[Parameter(Mandatory)]
[XmlElement]
$SitemapRootNode
)
$allSubareas = [System.Collections.ArrayList]@();
$areaNodes = $SitemapRootNode.Area;
foreach($areaNode in $areaNodes) {
$areaName = $areaNode.Id;
$subareas = $areaNode.GetElementsByTagName('SubArea');
foreach($subareaNode in $subareas) {
[void]$allSubareas.Add([PSCustomObject]@{
Area = $areaName;
SubareaId = $subareaNode.Id
});
}
}
# in order to find duplicates - group by area-id and subarea-id
$grouped = $allSubareas | Group Area, SubareaId;
# find only those subareas where multiple items exists per group
$duplicates = $grouped.Where({ $_.Count -gt 1 });
$duplicates;
}
# $filename = '2017-03-08 SiteMap (Pre-Production).xml'
$fileName = '2017-03-08 Modified Sitemap (Development).xml';
$filepath = Join-Path $PSScriptRoot $filename;
$sitemap = [Xml](Get-Content -Path $filepath);
$duplicates = Find-DuplicateSubareaIdsInSitemap -SitemapRoot $sitemap.ChildNodes[0];
if($duplicates.Count -eq 0) {
Write-Host -ForegroundColor Green "No Duplicate 'Subarea' nodes found - all is good!"
}
else {
Write-Host -ForegroundColor Red "Found '$($duplicates.Count)' duplicates 'Subarea' nodes"
$duplicates | Sort Name
}