【发布时间】:2020-06-10 20:16:23
【问题描述】:
我正在尝试将 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 to 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
【问题讨论】:
-
您需要将模板编辑为 a) 删除
=和属性值开头之间的空格(例如,Phone= "$($Phone.Phone)"应该是Phone="$($Phone.Phone)",并且 b)添加绑定ID,就像其他人演示的那样,您从模板中删除了它。 -
嗨,Ken,感谢您的回复,我现在确实看到我在那里留了一个空间。我已经在我的脚本中解决了这个问题。至于 ID 绑定,我不确定您指的是什么。我不需要我的 XML 来显示用户 ID。该脚本需要将 CSV 转换为看起来与所需结果完全相同的 XML,其中包含我无法在用户信息之外编写的 XML 版本信息和 TSP 绑定。如果我将此添加到我当前的模板中,它会为每个用户复制它,我相信这与 foreach($_.Group 中的 $Phone)有关,但我对每个/foreach 对象并不熟悉。跨度>
-
你说得到以下输出,它很接近但缺少一些绑定,我能看到的唯一缺少的绑定是oyu忘记绑定
ID,正如我提到的前。如果您还有其他问题,您的帖子中并不清楚。
标签: xml powershell csv