#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","")