2017-05-19 14 views
0

私は前に追加する必要があるxmlファイルをバックスラッシュで置き換えます。xmlをとるアプリケーションはさまざまな理由から必要です。powershell - xmlノード間の文字を置き換えます。

だから私はあることを\ n個 キャリッジリターンで交換する 改行fを\に置き換えるべき\ フォームフィードによって置き換えられる\ " バックスラッシュ\に置き換えられるために、次のchnagesに "を行う必要があります¥ タブに置き換えられます。\ t のバックスペースに置き換えられます。\ b

非常に単純なxmlスニペットは、次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
     <ContactDetailsRow num="1"> 
     <Notes>This a test for special characters that need to be replaced 
Ampersand - &amp; 
Double Quote - &quot; 
Forward Slash -/
Back Slash - \ 
Less Than - &lt; 
Greater Than - &gt; 
Question Mark - ? 
Tab  </Notes> 
     </ContactDetailsRow> 

私がこれまでに試したことは、GCに基づいて置き換えられましたが、動作していないようです。

$path = "C:\Dump\TEST" 
$Files = Get-Childitem -path $path -File -include testfile*.xml -name 

foreach ($File in $Files) 
{ 
    write-host "=== FILE is $File ===" -ForegroundColor "White" 
    $xml = [xml](Get-Content $path\$File) 

    $xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes -replace '&quot;', '\&quot;' #doubel quote 
    $xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes -replace '`n;', '`\n'   #newline 
    $xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes -replace '`f' , '`\f'   #form feed 
    $xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes -replace '`r' , '`\r'   #carriage return 
    $xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes -replace '`t' , '`\t'   #tab 
    $xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes -replace '`b' , '`\b'   #backspace 
    $xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes -replace '`\' , '`\\'   #back slash 
    write-host $xml.ContactDetailsRow.Notes 

    $xml.Save("$path\$File") 
} 

私は選択ノードでもやってみましたが、そのどちらも問題ありませんでした。

$xml.SelectNodes('//text()') | ForEach-Object { 
    $_.Value = ($_.Value -replace "&quot;" , "\&quot;") 
} 

答えて

1

XMLノードの値はタイプ文字列からのものです。 .Replace()メソッドを使用できます。

$xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes.Replace("`t" , '\t') 

あなたがXMLとしてファイル内容を読めば、またPowerShellは&quot;ような式を解釈します。

関連する問題