我有以下XML电话簿,其电话号码以07和01开头,我想分别用+447和+441替换。有人可以建议一个简单的方法吗?
<directory>
<Entry>
<Name>***Travis</Name>
<extension>02089425943</extension>
</Entry>
<Entry>
<Name>***Nina</Name>
<extension>0177377106</extension>
</Entry>
<Entry>
<Name>***Yusra</Name>
<extension>07790400192</extension>
</Entry>
<Entry>
<Name>***Raoul</Name>
<extension>07818838683</extension>
</Entry>
</directory> <directory>
任何帮助感激地收到..
您可以将其视为纯文本替换:
(Get-Content 'C:\folder\phonebook.xml') `
-replace '<extension>01','<extension>+441' `
-replace '<extension>07','<extension>+447' |
Set-Content 'C:\folder\phonebook.xml'
Get-Content
用括号括起来,以便powershell读取它然后释放文件锁,没有这些,你在使用Set-Content
时会出错。
我正在使用反引号将命令放到多行上,这使得它比单行更具可读性:
(Get-Content 'C:\folder\phonebook.xml') -replace '<extension>01','<extension>+441' -replace '<extension>07','<extension>+447' | Set-Content 'C:\folder\phonebook.xml'
您还可以使用PowerShell的本机XML支持。
$xml = [xml] (Get-Content ".\directory.xml")
foreach($entry in $xml.directory.Entry)
{
if ($entry.extension.StartsWith("07"))
{
$entry.extension = "+447" + $entry.extension.Substring(2)
}
if ($entry.extension.StartsWith("01"))
{
$entry.extension = "+441" + $entry.extension.Substring(2)
}
}
$xml.directory.Entry
$xml.Save(".\directory.xml")
# Name extension
# ---- ---------
# ***Travis 02089425943
# ***Nina +44177377106
# ***Yusra +447790400192
# ***Raoul +447818838683