Как добавить замененные изменения в узел XML? - PullRequest
1 голос
/ 02 мая 2019

Я создаю этот скрипт, который читает конфигурацию pidgin, может быть несколько учетных записей, а затем мне нужно сохранить первую часть до символа @ и изменить сервер, но функция сохранения не добавляет эти изменения.

Уже пробовал -replace, setcontent, save, no luck.

XML выглядит следующим образом:

<account>
 <account>
  <name>account1@oldserver.com</name>
 </account>
 <account>
  <name>account2@oldserver.com</name>
  </account>
</account>


$path="$Env:USERPROFILE\AppData\Roaming\.purple\"
$file="$path\accounts.xml"
$myxml = [xml](gc -Encoding utf8 $path\accounts.xml) 
$key = $myxml.account.account.name;

foreach ($name in $key)
{
    $account = $name.split('@')[0] 
    $server = $name.split('@')[1] 
    Write-Host "There is $account on $server"
    $newKey = $account +'@'+$server -Replace "appsrv.domain.com/","openfire.domain.com/"

}

$newKey
$xml.save($file)


Он успешно выводит только второй аккаунт с недавно замененной строкой, а не обаи он не сохраняет его.

 There is account1 on appsrv.domain.com/ 
 There is account2 on appsrv.domain.com/
 account2@openfire.domain.com/

, и я хочу сохранить его обратно в XML.account1@openfire.domain.com

Большое спасибо!Ценю помощь!

1 Ответ

0 голосов
/ 02 мая 2019

Вы должны использовать xpath.

Я не знаю, как точно выглядит ваш xml, но что-то подобное должно работать:

$file="YourPath"
$myxml = [xml](Get-Content -Path $file) 
$myxml.SelectNodes('//account/name') | foreach {
    $account = $_.'#text'.split('@')[0] 
    $server = $_.'#text'.split('@')[1] 
    Write-Host "There is $account on $server"
    $_.'#text'= $account +'@'+$server -Replace "appsrv.domain.com/","openfire.domain.com/"
}
$myxml.Save($file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...