簡體   English   中英

在Powershell中使用來自XML的數據更新csv文件

[英]Updating my csv file with data from XML in powershell

出於教育目的,我試圖通過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> 

電源外殼:

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'

我懷疑您的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

最后,我認為您的問題不是將對象返回到管道中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM