У меня есть CSV-файл со значениями, приведенными ниже:
Age , Status
29 , 0
41 , 1
44, 1
27, 0
60, 1
XML выглядит следующим образом:
<office>
<staff branch="Torrance" Type="Implementation">
<employee>
<Name>Raj Parpani</Name>
<function>Implementation</function>
<age>29</age>
</employee>
<employee>
<Name>Kevin Woo</Name>
<function>Consultant</function>
<age>41</age>
</employee>
</staff>
<staff branch="Irvine" Type="Operations">
<employee>
<Name>David Woo</Name>
<function>Data</function>
<age>42</age>
</employee>
</staff>
</office>
Если XML возраст равен возрасту в CSV я должен добавить атрибут статуса для этого возраста из CSV сотруднику. Я пробовал код, как показано ниже:
ОРИГИНАЛЬНЫЙ КОД
$csv = Import-Csv 'C:\Users\rparpani\Desktop\test2.csv' | Select-Object "Age","Status"
$xml = New-Object XML
$xml.Load("C:\Users\rparpani\Desktop\test.xml")
$nodes = $xml.SelectNodes("/office/staff/employee")
Foreach($row in $csv)
{
foreach($node in $nodes)
{
if($node.age -eq $row.age)
{
$node.SetAttribute("status", $row.Status);
}
}
}
Может кто-нибудь, пожалуйста, подскажите, как изменить это, чтобы сделать то, что я хочу, чтобы он делал
Модифицированный код
$csv = Import-Csv 'C:\Users\rparpani\Desktop\test2.csv' | Select-Object "Age","Status"
$xml = New-Object XML
$xml.Load("C:\Users\rparpani\Desktop\test.xml")
$nodes = $xml.SelectNodes("/office/staff/employee")
foreach($row in $csv) {
foreach($node in $nodes) {
if ($node.age -eq $row.age) {
if ($node.status) {
$node.status.innerText = $row.Status
}
else {
$status = $xml.CreateNode("element", "status", "")
$status.InnerText = $row.status
$node.AppendChild($status)
}
}
}
}
$xml.Save("C:\Users\rparpani\Desktop\test.xml")