我有一个脚本:
(Get-Content .\test.xml).replace('VALUE', 'MY_VALUE') | Set-Content .\test.xml
(Get-Content .\test.xml).replace('VALUE_01', 'MY_VALUE_01') | Set-Content .\test.xml
当我在文件中看到结果时:
MY_VALUEMY_VALUE_01
是否有可能使新的行像这样:
MY_VALUE MY_VALUE_01
XML:
<VALUE>TEST</VALUE><VALUE_01>TEST_1</VALUE_01>
有任何想法吗?
在将xml写入文件时尝试获取回车时发现这一点。我想我会添加我的解决方案以防其他人在这里寻找这个答案。
到目前为止唯一的答案并不理想,因为它会在标记本身中添加额外的字符,如果将xml数据用于其他任何内容,可能会产生意想不到的后果。
我相信,更好的答案是让powershell将xml视为xml并使用save方法公开xml对象。 save方法编写格式良好的xml。
$fileContents = [xml]((Get-Content .\test.xml) -replace "VALUE","VALUE01" )
$fileContents.save(.\test.xml)
如果你想在保存文件之前进行双重替换,它看起来很麻烦,但实质上只是添加另一个-replace和一对周围的括号。
$fileContents = [xml](((Get-Content .\test.xml) -replace "VALUE1","VALUE01" ) -replace "VALUE2","VALUE02")
$fileContents.save(.\test.xml)
如果你想把它作为一个衬里,它可能看起来像这样,第二个替换被删除了易读性和线长。
([xml]((Get-Content .\test.xml) -replace "VALUE","VALUE01" )).save(.\test.xml)
我个人认为,当它开始变得复杂以便于阅读和修改时,使用多行更好。
我似乎找到了解决方案:
(get-content .\test.xml) -replace 'VALUE',"`nVALUE_01" | set-content .\test.xml
(get-content .\test.xml) -replace 'VALUE_01',"`nMY_VALUE_01" | set-content .\test.xml