Замените ‘.00’ на пустое значение в xml с помощью powershell

#xml #powershell #powershell-4.0

#xml #powershell #powershell-4.0

Вопрос:

У меня есть XML-файл с тегом. Однако значение в теге каким-то образом отображается как 111.01.00, тогда я хочу удалить .00. Я пытался заменить функцию, но, похоже, она печатает на экране powershell вместо сохранения, хотя у меня уже была функция сохранения, вот мой код:

 param ($folder = 'C:UsersblitzDesktopBaiduriCRnew_xml_format')
$files = Get-ChildItem -Path $folder -Include "*xml" -Recurse
foreach ($file in $files) {
[xml]$xml = Get-Content $file
$xml.SelectNodes('//*[self::balance]') |
    ForEach-Object { $_.'#text' -replace '.00',''} 
$xml.Save($file)
}
  

Ответ №1:

Вы заменяете текст, но на самом деле ничего с ним не делаете. Установите элемент обратно с результатами.

 param ($folder = 'C:UsersblitzDesktopBaiduriCRnew_xml_format')
$files = Get-ChildItem -Path $folder -Include "*xml" -Recurse
foreach ($file in $files) {
[xml]$xml = Get-Content $file
$xml.SelectNodes('//*[self::balance]') |
    ForEach-Object { $_.'#text' = $_.'#text' -replace '.00',''} 
$xml.Save($file)
}
  

Когда вы заменяете что-то ничем, вы можете опустить ,'' и сделать это просто

 $_.'#text' = $_.'#text' -replace '.00'
  

Комментарии:

1. Кстати, я использую тот же способ для замены пустого узла на 0, но он не работает. ForEach-Object { $_.’#text’ = $_.’#text’ -замените «0»,’0′} Можете ли вы помочь исправить…

2. Что это за `перед 0?

3. Насколько я понимаю. 0 означает линию разрыва.

4. Моему узлу нравится <баланс /><баланс>, затем я хочу изменить на <баланс />0<баланс>

Ответ №2:

На самом деле, @DougMaurer в порядке, но нам здесь не нужно регулярное выражение, -replace использует регулярное выражение и . Имеет значение для регулярного выражения (соответствует любому символу). Затем измените его на:

 $_.'#text'.replace(".00","")