Я пытаюсь вставить некоторые файлы CSV с разделителями табуляции в XML через PowerShell, и я изо всех сил пытаюсь понять все это.Я на 100% уверен, что это что-то очень простое, что мне не хватает, так что помощь будет очень цениться.Я очень близок, но просто не могу преодолеть последнее препятствие.
Я хочу, чтобы этот скрипт перебирал CSV с разделителями табуляции, на который он указывает ($path
), убирая каждую строку изCSV и поместите данные в лист XML ($xmlpath
).
Пример CSV:
"Name" "Item" "Purchase Price"
"Jimmy Smits" "Egg" "£40"
"Edward Price" "KumQuat" "£6000"
"Timmy Mallet" "Bug" "£2"
"Edgar Allen Poe" "Weird" "0"
"2Pac Shakur" "Eggnog" ""
Пример шаблона вывода XML:
<registration>
<Individual>
<Name></Name>
<Item></Item>
<Purchase Price></Purchase Price>
</Individual>
</registration>
И этото, о чем я суетился с
$data = Import-Csv -Path $path -Delimiter "`t"
$xmlnames = $data | Select-Object "Name"
$xmlitems = $data | Select-Object "Item"
$xmlprice = $data | Select-Object "Purchase Price"
$entryTemplate = @'
<individual>
<Name>$($xmlnames.Name)</Name>
<Item>$($xmlitems.Item)</Item>
<Purchase Price>$($xmlprice."Purchase Price")</Purchase Price>
</individual>
'@
$xml = $data | ForEach-Object {
$ExecutionContext.InvokeCommand.ExpandString($entrytemplate)
}
$xml | Out-File $xmlpath
, который затем выдает;
<Individual>
<Name>Jimmy Smits Edward Price Timmy Mallet Edgar Allen Poe 2Pac Shakur</Name>
<Item>System.Object IList.Item(int index) {get;set;}</Item>
<Purchase Price>£40 £6000 £2 0 </Purchase Price>
</Individual>
Так что где-то я тупо путаюсь с двумя вещами;
- * *
$data | Select-Object 'thing'
дает мне весь список «вещей», а не перебирает каждую из «вещей» и перечисляет их по одному на каждую запись XML.Тем не менее, дает ли мне правильное количество записей? - Мои «Элементы» перечислены как системные объекты (не значения), несмотря на то, что ко всем остальным относятся одинаково.