Powershell替换XML文件中的值

Powershell替换XML文件中的值,xml,powershell,Xml,Powershell,我得到了两个XML文件,我正在读取第一个XML文件中的一个值,需要将第二个XML中的值替换为一个特定字符串,这是我到目前为止得到的结果,但效果不好,因为某种原因,它将整个XML改为#文档 编辑 修改脚本的整个逻辑,我一直在修剪节点,在IdexOf出现错误为什么 <BunnyTemplate> <Parm Name="A-1" Source="Application" OnAbsence="1.com"> <Parm Name="A-2" Source="Applic

我得到了两个XML文件,我正在读取第一个XML文件中的一个值,需要将第二个XML中的值替换为一个特定字符串,这是我到目前为止得到的结果,但效果不好,因为某种原因,它将整个XML改为#文档

编辑 修改脚本的整个逻辑,我一直在修剪节点,在IdexOf出现错误为什么

<BunnyTemplate> <Parm Name="A-1" Source="Application" OnAbsence="1.com"> <Parm Name="A-2" Source="Application" OnAbsence="2.com"> <Parm Name="A-3" Source="Application" OnAbsence="\\3\3"/> <Parm Name="A-4" Source="Application" OnAbsence="4.com"> </BunnyTemplate> 

不要在XML文档上使用
-replace
,而是使用
XPath

假设
$file2
包含:


。。。您可以执行以下操作:

$file2Xml=[xml](获取内容$file2)
#定位目标节点
$targetNode=$file2Xml.SelectSingleNode(“//Parm[@OnAbsence]”)
#覆盖属性值
$targetNode.SetAttribute('OnAbsence',“text${trimmedNode}”)
#保存文件
$file2Xml.Save(“C:\path\to\output.xml”)
SelectSingleNode(“//Parm[@OnAbsence]”)
将返回第一个具有
OnAbsence
属性的
节点


如果您特别需要使用
Source=“Bunny”
作为目标,您可以使用
//Parm[@Source='Bunny']
来代替
不要在XML文档上使用
-replace
,而是使用
XPath

假设
$file2
包含:


。。。您可以执行以下操作:

$file2Xml=[xml](获取内容$file2)
#定位目标节点
$targetNode=$file2Xml.SelectSingleNode(“//Parm[@OnAbsence]”)
#覆盖属性值
$targetNode.SetAttribute('OnAbsence',“text${trimmedNode}”)
#保存文件
$file2Xml.Save(“C:\path\to\output.xml”)
SelectSingleNode(“//Parm[@OnAbsence]”)
将返回第一个具有
OnAbsence
属性的
节点



如果您特别需要使用
Source=“Bunny”
,您可以使用
//Parm[@Source='Bunny']
,而不是请显示
$file2
@MathiasR.Jessen的示例xml内容。我无法将其与工作相关,看起来像内部有值为什么不添加一个带有虚拟值和/或名称的示例@Remko希望这有助于您简单地使用示例XML:
$file1.BunnyTemplate.parm.OnAbsence='NewValue'
请显示
$file2
@MathiasR.Jessen的示例XML内容,我无法将其与工作相关,看起来与内部值类似为什么不添加一个具有虚拟值和/或名称的示例@Remko希望这有助于您在示例XML中简单地执行:
$file1.BunnyTemplate.parm.OnAbsence='NewValue'
感谢您的快速重播,我不确定我应该如何使用xpath。您可以提供一个示例吗?@BugsBunny您已经在使用xpath从
$file1
检索值了!如果您用
$file2
示例更新您的问题,我可以向您展示,只需编辑任何特定于公司的内容即可values@BugsBunny更新了answerHmm idk出了什么问题,但是现在如果我尝试从XML文件中获取内容并编写宿主文件,我只会得到“否”error@BugsBunny请停止在评论中发布代码。并为这两个文件添加一个示例感谢快速重播,我不确定应该如何使用xpath。您可以提供一个示例吗?@BugsBunny您已经在使用xpath从
$file1
检索值了!如果您用
$file2
示例更新您的问题,我可以向您展示,只需编辑任何特定于公司的内容即可values@BugsBunny更新了answerHmm idk出了什么问题,但是现在如果我尝试从XML文件中获取内容并编写宿主文件,我只会得到“否”error@BugsBunny请停止在评论中发布代码。并为这两个文件添加一个示例
$file1 = "C:\..\Desktop\file1.xml"
$file1Content = [xml](Get-Content $file1)
$targetNode = $file1Content.SelectSingleNode("//General/@findMe")
$trimmedNode = $targetNode.Substring(0, $targetNode.IndexOf('last'))