Обновление: входной файл XML неправильно организовывает сотрудников; они все «смешаны» в Office и, на наш взгляд, сгруппированы, но нет ничего, что указывало бы, какие значения следует группировать вместе.
Вот скрипт, который преобразует ваш первый файл во второй, исходя из предположения, что элементы сотрудника в первом файле всегда отображаются в одном и том же порядке и всегда группируются вместе.
[xml]$curXml = Get-Content test.xml
$empNode = $curXml.FirstChild.CloneNode($true)
$curXml.FirstChild.RemoveAll()
$newNode = $curXml.CreateElement("OfficeName")
$newNode.InnerText = "NEWOFFICE"
$n = $curXml.FirstChild.AppendChild($newNode)
$newNode = $curXml.CreateElement("OfficeRegNuM")
$newNode.InnerText = "1234"
$n = $curXml.FirstChild.AppendChild($newNode)
$newNode = $curXml.CreateElement("OfficeAddress")
$newNode.InnerText = "Building 001"
$n = $curXml.FirstChild.AppendChild($newNode)
foreach ($child in $empNode.GetEnumerator())
{
if ($child.Name -eq "EmpID") {
$newEmp = $curXml.CreateElement("Employee")
$n = $curXml.FirstChild.AppendChild($newEmp)
}
$n = $newEmp.AppendChild($child.Clone())
}
Write-Host $curXml.InnerXml
Set-Content -Value $curXml.OuterXml -path testOutput.xml