Powershell脚本,用于使用CSV文件作为参数查找和替换XML文件中的值

时间:2013-10-04 16:30:06

标签: xml powershell csv

我创建了一个生成XML文件的Powershell脚本。所有XML数据都在脚本中,无论需要重复哪些项目,我都会根据CSV中的行数(减去标题)进行循环。

脚本的下一部分是我遇到问题的地方。基于相同的CSV,我现在正在尝试修改生成的XML文件并进行查找和替换。我生成了需要从循环中替换的单词,例如FName1,FName2,FName3,LName1,LName2,LName3。

我的问题是,每当我尝试从CSV文件中替换这些单词时,除非我硬编码FName1,FName2等,否则不会替换任何内容。

这是我知道的代码不正确....基本上我希望它查找FName(1,2,3等)和LName(1,2,3等)的任何实例并用$替换它_.FirstNames and $ _。LastNames。

$c = Import-Csv test.csv

Get-ChildItem test.xml | Foreach-Object {
  $xmldoc = (Get-Content test.xml | Out-String)
  $i = 0
  $c | Foreach-Object {
    $xmldoc = $xmldoc -replace 'FName' + $i++,$_.FirstNames `
    -replace 'LName' + $i,$_.LastNames
  }

  $xmldoc | Set-Content test.xml
}

这是test.xml文件的一部分

<ItemRef ItemID="FName1" Mandatory="No"/>
<ItemRef ItemID="FName2" Mandatory="No"/>
<ItemRef ItemID="FName3" Mandatory="No"/>
<ItemRef ItemID="LName1" Mandatory="No"/>
<ItemRef ItemID="LName2" Mandatory="No"/>
<ItemRef ItemID="LName3" Mandatory="No"/>

这是test.csv文件:

FirstNames,LastNames
John,Doe
Jane,Doe
Mike,Smith
Samantha,Fox

非常感谢任何帮助!

谢谢,

NAS

1 个答案:

答案 0 :(得分:0)

为什么要在FNameLName之间递增计数器? 不要使用Get-Content来读取您的文件,而是使用[IO.file]::ReadAllText()[IO.file]::ReadAllText()不会根据换行符将文件分成数组。