0

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

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

我的问题是,每当我尝试从 CSV 文件中替换这些单词时,除非我对 FName1、FName2 等进行硬编码,否则什么都不会被替换。

这是我知道不正确的代码....基本上我希望它查找 FName(1,2,3 etc) 和 LName(1,2,3 etc) 的任何实例并将其替换为 $ _.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

任何帮助将不胜感激!

谢谢,

纳斯

4

1 回答 1

0

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

于 2013-10-04T21:56:18.073 回答