Конвертировать CSV в XML в Powershell - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь преобразовать документ CSV в документ XML для импорта в каталог. CSV форматируется следующим образом:

 Firstname,Lastname,Email,Phone,Room,ID
 Bob,Smith,Bobs@email.com,1111,Suite 101,1
 John,Doe,John@email.com,2222,Suite 102,2

Требуемый XML вывод должен быть следующим:

<?xml version="1.0" encoding="UTF-8"?>
<TSP version="1.1">
    <contact firstname="Bob" lastname="Smith" email="Bobs@email.com" Phone="1111" room="Suite 101" id="1"/>
    <contact firstname="John" lastname="Doe" email="John@email.com" phone="2222" room="Suite 102" id="2"/>
</TSP>

Использование информации из этого поста Powershell CSV до XML Мне удалось получить следующий вывод, который близок, но пропущены некоторые привязки:

<contact Firstname ="Bob" Lastname= "Smith Email= "Bobs@email.com Phone= "1111" Room= "Suite 101" Phone= "1111" />
<contact Firstname ="John" Lastname= "Doe Email= "John@email.com Phone= "2222" Room= "Suite 102" Phone= "2222" />

Любая помощь очень ценится!

Используемый скрипт:

$docTemplate = @'
<contact $($contacts -join "`n") />
'@
$entryTemplate = @'
Firstname ="$($Phone.Firstname)" Lastname= "$($Phone.Lastname) Email= "$($Phone.Email) Phone= "$($Phone.Phone)" Room= "$($Phone.Room)" Phone= "$($Phone.Phone)"
'@

Import-Csv Test.csv -Delimiter ',' | Group-Object Id -ov grp | ForEach-Object {
  $contacts = foreach ($Phone in $_.Group) {
    $ExecutionContext.InvokeCommand.ExpandString($entryTemplate)  
  }
 $ExecutionContext.InvokeCommand.ExpandString($docTemplate) } | 
  Set-Content -LiteralPath file.xml

1 Ответ

0 голосов
/ 07 марта 2020

Ian

В этом разделе много работы, которая затрудняет поиск и устранение неисправностей и тестирование.

Import-Csv Test.csv -Delimiter ',' | Group-Object Id -ov grp | ForEach-Object {$ contacts = ...

Предложите разбить это на отдельные операторы с оператором печати между ними. Цель состоит в том, чтобы выяснить это, если проблема связана с 1. Import-Cvs 2. Group-Object 3. Разверните entryTemplate или соответствующий шаблон 4. разверните docTemplate. или соответствующий шаблон

Еще одна мысль, основанная на проблеме с кавычками в выходных данных, заключается в необходимости экранирования специальных символов, таких как кавычки. Я мало что сделал, я PowerShell, но задом наперед sh перед специальным символом - это один из способов сказать парсеру, что вы хотите, чтобы кавычка рассматривалась как символ кавычки, а не как инструкция для определения строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...