【发布时间】:2013-10-11 18:03:45
【问题描述】:
我创建了一个生成 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
任何帮助将不胜感激!
谢谢,
纳斯
【问题讨论】:
-
我不会修复/改进您的代码,因为您的方法是错误的。 Unix shell/过程思维方式不适用于 Powershell。从对象、它们的属性、方法的角度来思考。不要通过 string find 'n replace. 处理 XML
标签: xml powershell csv