查找并替换XML电话簿中的条目

问题描述 投票:0回答:2

我有以下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>

任何帮助感激地收到..

xml powershell xpath
2个回答
0
投票

您可以将其视为纯文本替换:

(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'

0
投票

您还可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.