当字符串包含引号时使用替换

时间:2015-08-31 15:28:28

标签: xml powershell replace quotes

我阅读了其他帖子并尝试了他们的解决方案,但我似乎无法让它为我工作。

我需要更新多个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>

1 个答案:

答案 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")
相关问题