【发布时间】:2021-04-04 21:25:47
【问题描述】:
我有一个 CSV 文件,其布局如下所示:
Region,Store,Number,IP Address,Store Number
Central,ABC,111,127.0.0.1,1234
Central,CDE,222,127.0.0.1,5678
Central,EFG,333,127.0.0.1,9101
Central,HIJ,444,127.0.0.1,1213
Central,KLM,555,127.0.0.1,1415
我需要构建一个如下所列的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_271" class="java.beans.XMLDecoder">
<object class="client.remoteaccess.model.AddressBookEntry">
<void property="country">
<string>USA</string>
</void>
<void property="ipAddress">
<string>127.0.0.1</string>
</void>
<void property="name">
<string>111 ABC</string>
</void>
<void property="storeNumber">
<string>1234</string>
</void>
</object>
<object class="client.remoteaccess.model.AddressBookGroup">
<void property="name">
<string>[None]</string>
</void>
</object>
<object class="client.remoteaccess.model.AddressBookGroup">
<void property="name">
<string>Imported Entries</string>
</void>
</object>
<object class="client.remoteaccess.model.AddressBookGroup">
<void property="name">
<string>Duplicated Entries</string>
</void>
</object>
</java>
我需要从 CSV 文件中提取每一行并将其添加到 xml 的中间,应该看起来像这样。
顶部:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_271" class="java.beans.XMLDecoder">
逐行遍历 CSV 文件,拉出每个位置,中间部分应该是这样的:
<object class="client.remoteaccess.model.AddressBookEntry">
<void property="country">
<string>USA</string>
</void>
<void property="ipAddress">
<string>127.0.0.1</string>
</void>
<void property="name">
<string>111 ABC</string>
</void>
<void property="storeNumber">
<string>1234</string>
</void>
</object>
<object class="client.remoteaccess.model.AddressBookEntry">
<void property="country">
<string>USA</string>
</void>
<void property="ipAddress">
<string>127.0.0.1</string>
</void>
<void property="name">
<string>222 CDE</string>
</void>
<void property="storeNumber">
<string>5678</string>
</void>
</object>
然后添加 XML 的底部部分,如下所示:
<object class="client.remoteaccess.model.AddressBookGroup">
<void property="name">
<string>[None]</string>
</void>
</object>
<object class="client.remoteaccess.model.AddressBookGroup">
<void property="name">
<string>Imported Entries</string>
</void>
</object>
<object class="client.remoteaccess.model.AddressBookGroup">
<void property="name">
<string>Duplicated Entries</string>
</void>
</object>
</java>
目前这是我一直在处理的代码,它会循环执行,但它是我 CSV 文件中的所有最后存储。在我做对这部分之前,我并不担心添加 XML 的顶部或底部。
$xmlpath = "test.xml"
Add-Type -AssemblyName System.Web
$Stores = Import-Csv -Path "Stores.csv"
foreach($Loc in $Stores){
$StoreName = '{0}' -f $Loc.Store
$Number = '{0}' -f $Loc.Number
$IP = '{0}' -f $Loc."IP Address"
$StoreNum = '{0}' -f $Loc."Store Number"
try {
$entryTemplate = @'
<object class="client.remoteaccess.model.AddressBookEntry">
<void property="country">
<string>USA</string>
</void>
<void property="ipAddress">
<string>$IP</string>
</void>
<void property="name">
<string>$Number $StoreName</string>
</void>
<void property="storeNumber">
<string>$StoreNum</string>
</void>
</object>
'@
$xml = $data | ForEach-Object {
$ExecutionContext.InvokeCommand.ExpandString($entrytemplate)
}
$xml | Out-File $xmlpath
}
catch {
Write-Output $_.Exception.Message
}
}
【问题讨论】:
标签: xml powershell loops csv foreach