【问题标题】:Convert CSV to XML in Powershell在 Powershell 中将 CSV 转换为 XML
【发布时间】: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


【解决方案1】:

伊恩

本节中发生的许多事情使故障排除和测试变得困难。

Import-Csv Test.csv -Delimiter ',' |组对象 ID -ov grp | ForEach-对象 { $联系人 =...

建议将其分解为单独的语句,中间有打印语句。目标是弄清楚问题是否与 1.导入-Cvs 2. 组对象 3.展开entryTemplate或相应的模板 4.展开docTemplate。或相应的模板

基于输出中引号问题的另一个想法是需要转义引号等特殊字符。我没有做太多我是 PowerShell,但特殊字符前的反斜杠是告诉解析器您希望将引号视为引号字符而不是定义字符串的指令的一种方式。

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多