2016-06-28 49 views
0

我有一个脚本:获取内容:新行

(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> 

任何想法?

+0

('VALUE','MY_VALUE \ n')也许? –

+0

你能提供test.xml文件吗? –

+0

嗨,我已经得到了调用WebRequest在一行后的结果测试 TEST_1,但我需要替换标签名称后,使其在两行 – mulrus

回答

0

看来我发现soloution:

(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 
1

发现这个试图编写XML的文件时获得回车。我想我会添加我的解决方案,以防其他人在这里寻找这个答案。

到目前为止唯一的答案是不理想的,因为它会在标签本身中添加额外的字符,如果xml数据用于其他任何内容,可能会产生意想不到的后果。

我相信一个更好的答案是让powershell将xml当作xml并使用xml对象公开的save方法。 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) 

我个人认为用多行代码更好,当它开始变得越来越复杂时,便于阅读和修改。