我阅读了其他帖子并尝试了他们的解决方案,但我似乎无法让它为我工作。
我需要更新多个XML文件,并将节点值从<Option name="fldsep" value="|" />
更改为<Option name="fldsep" value="~" />
。
当我执行{ $_.Replace("|", "~") } | Set-Content $_.FullName
并完美更新XML文件时,它会起作用,但我不希望它覆盖现有的其他|
。
我尝试过:
{ $_.Replace('<Option name="fldsep" value="|" /> ','<Option name="fldsep" value="~" /> ') } | Set-Content $_.FullName
但它不会更新XML文件。
任何帮助将不胜感激!
以下是完整的参考代码:
$pathTest = "C:\Test" Get-ChildItem -path $pathTest -recurse -include "*.tf.*" | % {
$con = Get-Content $_.FullName
$con | % { $_.Replace('<Option name="fldsep" value="|" /> ','<Option name="fldsep" value="~" /> ') } | Set-Content $_.FullName
}
完整的XML部分如下所示:
<TransformationSourceOptions>
<Option name="codepage" value="ANSI" />
<Option name="recsep" value="LF" />
<Option name="fieldcount" value="0" />
<Option name="fldsep" value="|" />
<Option name="fldsdelim" value="None" />
<Option name="fldedelim" value="None" />
<Option name="header" value="False" />
<Option name="altfldsep" value="None" />
<Option name="soffset" value="0" />
<Option name="autostyle" value="False" />
<Option name="stylesamplesize" value="5000" />
<Option name="lstrip" value="False" />
<Option name="tstrip" value="False" />
<Option name="field1isrectypeid" value="False" />
<Option name="nullind" value="none" />
<Option name="emptyfieldsnull" value="False" />
<Option name="numericformatnormalization" value="False" />
<Option name="layoutmismatch" value="0" />
</TransformationSourceOptions>
答案 0 :(得分:1)
如果要更改XML文档中属性的值,请使用内置的XML支持!
# Load xml doc
$TransformDoc = [xml](Get-Content .\options.xml)
# Find option node and change value of "value" attribute
$TransformDoc.SelectSingleNode('//Option[@name="fldsep"]').value = "~"
# Save your changes to the document
$TransformDoc.Save("options.xml")