Добавьте родительский узел, сохранив существующий дочерний узел в существующем файле xml, используя Powershell- - PullRequest
1 голос
/ 01 апреля 2020

Существующий файл У меня есть файл ниже xml. Я хочу использовать PowerShell для добавления отсутствующего узла. Мне нужна помощь для создания нового файла XML. Нужна помощь в этом.

   <Office>
        <EmpID>0001</EmpID>
        <EmpName>John</EmpName>
        <Dept>HR</Dept>
        <Location>Ohio</Location>
        <Designation>Associate</Designation>

        <EmpID>0002</EmpID>
        <EmpName>George</EmpName>
        <Dept>IT</Dept>
        <Location>California</Location>
        <Designation>IT Engineer</Designation>

        <EmpID>0003</EmpID>
        <EmpName>James</EmpName>
        <Dept>Fin</Dept>
        <Location>NewYork</Location>
        <Designation>Auditor</Designation>
    </Office>

Новый ожидаемый файл

 <Office>
       <OfficeName>NEWOFFICE</OfficeName>
       <OfficeRegNuM>1234</OfficeRegNuM>
       <OfficeAddress>Building 001</OfficeAddress>
       <Employee> **#this is missing in existing file,How to add this Node
        <EmpID>0001</EmpID>
        <EmpName>John</EmpName>
        <Dept>HR</Dept>
        <Location>Ohio</Location>
        <Designation>Associate</Designation>
    </Employee> 
    <Employee>
        <EmpID>0002</EmpID>
        <EmpName>George</EmpName>
        <Dept>IT</Dept>
        <Location>California</Location>
        <Designation>IT Engineer</Designation>
    </Employee> 
    <Employee
        <EmpID>0003</EmpID>
        <EmpName>James</EmpName>
        <Dept>Fin</Dept>
        <Location>NewYork</Location>
        <Designation>Auditor</Designation>
    </Employee>
    </Office>

Приведенный выше вывод, который мне нужно сгенерировать с помощью POwerShell

1 Ответ

0 голосов
/ 02 апреля 2020

Обновление: входной файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...