powershell - 替换 xml 个节点之间的字符
powershell - replace characters between xml nodes
我有一个 xml 文件,我需要在前面加上反斜杠替换某些字符 - 采用 xml 的应用出于各种原因需要它。
所以我需要做以下更改
" 替换为 \"
反斜杠 \ 替换为 \
换页由 \f 代替
换行符替换为 \n
carriage return 替换为 \r
制表符被 \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 - &
Double Quote - "
Forward Slash - /
Back Slash - \
Less Than - <
Greater Than - >
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 '"', '\"' #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")
}
我也试过用 select 节点来做,但也没用。
$xml.SelectNodes('//text()') | ForEach-Object {
$_.Value = ($_.Value -replace """ , "\"")
}
XML 节点值来自字符串类型。
您可以只使用 .Replace() 方法。
$xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes.Replace("`t" , '\t')
如果您将文件内容读取为 XML.
,Powershell 还会解释像 "
这样的表达式
我有一个 xml 文件,我需要在前面加上反斜杠替换某些字符 - 采用 xml 的应用出于各种原因需要它。
所以我需要做以下更改 " 替换为 \" 反斜杠 \ 替换为 \ 换页由 \f 代替 换行符替换为 \n carriage return 替换为 \r 制表符被 \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 - &
Double Quote - "
Forward Slash - /
Back Slash - \
Less Than - <
Greater Than - >
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 '"', '\"' #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")
}
我也试过用 select 节点来做,但也没用。
$xml.SelectNodes('//text()') | ForEach-Object {
$_.Value = ($_.Value -replace """ , "\"")
}
XML 节点值来自字符串类型。 您可以只使用 .Replace() 方法。
$xml.ContactDetailsRow.Notes = $xml.ContactDetailsRow.Notes.Replace("`t" , '\t')
如果您将文件内容读取为 XML.
,Powershell 还会解释像"
这样的表达式