出于教育目的,我试图通过XML表格更新CSV文件。 更新我的CSV,其中客户端等于nummer(不对其进行硬编码)不起作用。有人可以看到我在做什么吗?
XML:
<wijzigen>
<klant nummer="4">
<stad>Troy</stad>
<provincie>TR</provincie>
<provincieVoluit>Troas</provincieVoluit>
<adres>happy horse street 27</adres>
<postcode>1200BC</postcode>
</klant>
<klant nummer="7">
<stad>Achaea</stad>
</klant>
</wijzigen>
Powershell:
function Wijzig-Klant{
$klantnummer = $wijziging.nummer
$stad = $wijziging.stad
$provincie = $wijziging.provincie
$provincieVoluit = $wijziging.provincieVoluit
$adres = $wijziging.adres
$postcode = $wijziging.postcode
$data = Import-Csv -Path "C:\Projecten\PowerShell\Data_v1.0.csv" -Delimiter ";"
$update = $data | Where-Object {$_.klantnummer -eq $klantnummer} | ForEach-Object {
$_.stad = $stad
$_.provincie = $provincie
$_.provincieVoluit = $provincieVoluit
$_.adres = $adres
$_.postcode = $postcode
}
$update | Export-Csv ("C:\Projecten\PowerShell\" + $datumVandaag + "Data_v1.0.csv") -Delimiter ";" -NoTypeInformation -Append
}
在powershell中读取XML文件中的数据:
$wijziging = $XMLDocument.klantadministratie.wijzigen.klant
[xml]$XMLDocument = Get-Content -Path 'C:\Projecten\PowerShell\XML Wijzigingen v1.0.xml'
答案 0 :(得分:0)
我怀疑您的XML模式实际上是:
$xml = [xml]@'
<?xml version="1.0"?>
<klantadministratie>
<wijzigen>
<klant nummer="4">
<stad>Troy</stad>
<provincie>TR</provincie>
<provincieVoluit>Troas</provincieVoluit>
<adres>happy horse street 27</adres>
<postcode>1200BC</postcode>
</klant>
<klant nummer="7">
<stad>Achaea</stad>
</klant>
</wijzigen>
</klantadministratie>
'@
根据您的示例。有了这些知识,您就需要进行null
检查,因为并非所有值都已填充:
$path = 'C:\Projecten\PowerShell\Data_v1.0.csv'
Import-Csv -Path $path -Delimiter ';' | ForEach-Object {
$set = $xml.SelectSingleNode("//klant[@nummer='$($PSItem.klantnummer)']")
if ($set.stad) { $PSItem.stad = $set.stad }
if ($set.provincie) { $PSItem.provincie = $set.provincie }
if ($set.provincieVoluit) { $PSItem.provincieVoluit = $set.provincieVoluit }
if ($set.adres) { $PSItem.adres = $set.adres }
if ($set.postcode) { $PSItem.postcode = $set.postcode }
$PSItem # return the updated row to the pipeline
} | Export-Csv -Path "C:\Projecten\PowerShell\${datumVandaag}Data_v1.0.csv" -NoTypeInformation -Append
最后,我认为您的问题不是将对象返回到管道中。