我创建了一个生成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
答案 0 :(得分:0)
为什么要在FName
和LName
之间递增计数器?
不要使用Get-Content
来读取您的文件,而是使用[IO.file]::ReadAllText()
。 [IO.file]::ReadAllText()
不会根据换行符将文件分成数组。