Как в файле xml заменить одно слово на другое

Обновлено: 04.07.2024

Я заметил, что с левой стороны каждой строки в файле notepad++ есть цифры "серого цвета", указывающие на соответствующий номер строки, поэтому я подумал, что функция "Найти и заменить" будет прямой (то есть заменить строку 17). в файле 1 со строкой 2 в файле 2) это было бы неплохо . Ну, я был неправ, и я не могу найти способ достичь того, что я пытаюсь сделать .

У меня есть 2 TXT (или XML-файлы) f1 и f2, и я пытаюсь сделать следующее: заменить определенные строки в f1 на заданную строку в f2 .

файл 1 (с несколькими сотнями строк)

файл 2 (каждая строка имеет свой код)

И я хочу . заменить строку 1 в файле 1 на строку 2 файла 2, а затем заменить строку 2 в файле 1 на строку 1 в файле 2 и т.д.Поэтому в идеале я думаю о какой-то команде или сценарии, которые говорят . найдите строку 1 в файле 1 и замените ее строкой 2 в файле 2, затем найдите строку 2 в файле 1 и замените ее строкой 1 в файле 2 и т.д. ,

Может быть, это нужно сделать за пределами Notepad++, используя сторонний инструмент или что-то в этом роде . Пожалуйста, сообщите и заранее спасибо! -Павел

1 ответ 1

В зависимости от объема замены у вас есть два подхода:

Установите менеджер плагинов для Notepad++ и плагин Compare, он отлично подходит для сравнения содержимого двух файлов. Если вы просто хотите заменить какой-либо текст (одно или несколько слов) другим текстом, вы можете сделать это вручную, используя поиск и замену в Notepad++. Это подходящее решение, если у вас есть небольшое количество таких текстов или если текст для замены является коротким.

Если количество таких замен велико, и если вам нужно часто делать такие замены, то вам нужно что-то вроде Unix diff и patch, и таких инструментов много для Windows бесплатно. Использование простое - вывод утилиты diff - это файл патча, который вы можете применить (с помощью инструмента патча) ко второму файлу, чтобы получить оба файла одинаково. Проще всего скопировать файл, но если вы не хотите, чтобы целые файлы были идентичными, а только несколько строк, отредактируйте файл патча (это простой текстовый файл) и просто удалите то, что вам не нужно.

Программа не работает с файлами doc , docx и mp3 . На других форматах её работоспособность не проверялась.

Search And Replace работает с кодировкой UTF-8.

Инструкция

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

Настройки программы Search And Replace

Первым делом нужно изменить настройки по умолчанию, зайдя в пункт меню Tools (Инструментарий) и установив метки как на скриншоте ниже:

Перевод пунктов меню смотрите ниже.

Простой способ поиска и замены

Step 1: Find. Replace with. (Шаг 1: Найти. Заменить на. )

  1. На вкладке Simple (Простой), в области Search for this text (Найти этот текст), вводится текст, который нужно найти и заменить; чуть ниже можно поставить метку Case Sensitive Search (Искать с учётом регистра), если нужен поиск с учётом регистра.
  2. В области Replace found text with this text (Заменить найденный текст на следующий) пишется текст, на который нужно заменить найденный.

Step 2: Where to replace (files etc) (Шаг 2: Где заменить (файлы и так далее))

Drag'n'Drop (Перетащить) Перетаскиваем на соответствующую область файлы, в которых нужно найти и заменить текст: Specify Directory (Указать папку) Выбираем папку, в которой находятся файлы для поиска и замены, с помощью кнопки Browse (Обзор); также, в случае необходимости, активируем опции Include subdirectories (Включая вложенные папки) и All files (Все файлы) или указываем расширения файлов через точку с запятой без пробела (.html;.php;.txt;. ) в соответствующем поле: Рекомендую всегда указывать конкретные расширения файлов (.html;.php;.txt;. ), так как иначе программа может (если обнаружит совпадения) автоматически заменить код «нетекстовых» файлов (например, изображений), что приведёт к их порче. Text (like notepad) (Текст (как блокнот)) В указанную область пишем текст, в котором нужно найти и заменить другой текст:

Шаг 3: Нажать кнопку Search and Replace (Найти и Заменить)

Пример для простого способа

Результат будет следующий: четыре плюс четыр е надцать равно икс

Поиск и замена по способу «От. До. »

Заменяя текст по этому способу, следует учесть то, что в области ЗАМЕНИТЬ НА нужно писать также текст областей ОТ и ДО (см. пример).

Пример для способа «От. До. »

Опция Case Sensitive Search (Искать с учётом регистра), в этом случае, должна быть активирована.

Добавление текста

Удаление текста

Перевод

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

Начал я писать скрипт для автоматизации установки Windows из среды WinPE с пользовательским вводом информации, и столкнулся со следующей проблемой.

Есть xml файл, который является файлом ответа, с заранее заданными параметрами установки Windows, и мне необходимо что бы пользователь в интерактивном режиме, допустим с помощью переменных, изменял в этом файле некоторые слова, например $computername$, $username$ и $displayusername$ на русские и английские слова. Знак доллар можно заменить чем угодно, да и слова могут быть разными. BAT файл должен выполнятся в кодировке OEM-866.

Кусок исходного xml кода:

Кусок того, что хочу получить:

Кодировка xml файла utf-8, notepad++ показывает ANSI as utf-8, после внесения изменения файл должен отображаться в стандартном блокноте и браузере нормально, русские буквы должны отображаться без крякозябр, кодировка должна остаться такой же. Исходный файл должен остаться нетронутым, а новый должен называться unattend.xml и перемещен по заданному пути.

Для пользователя должно это выглядеть следующем образом.

Исходный xml файл прикладываю.

source.xml 6.02 kb, 14 downloads since 2014-02-08

You don't have the permssions to download the attachments of this post.

2 Ответ от alexii 2014-02-08 23:49:04

Используйте WSH или PoSH.

3 Ответ от wisgest 2014-02-09 00:04:48

  • wisgest
  • Разработчик
  • Неактивен











danishru, насколько срочно?

alexii, если забыть про UTF-8 и думать, что всё в CP866, сделаете BAT? Я бы адаптировал под UTF-8.

4 Ответ от danishru 2014-02-09 00:43:41 (изменено: danishru, 2014-02-09 00:46:43)

Используйте WSH или PoSH.

Мне бы с CMD совладать бы, а вы про WSH или PowerShell.

5 Ответ от danishru 2014-02-09 00:46:30 (изменено: danishru, 2014-02-09 00:54:31)

danishru, насколько срочно?

alexii, если забыть про UTF-8 и думать, что всё в CP866, сделаете BAT? Я бы адаптировал под UTF-8.

Да не очень и срочно это, пока сделал открытие блокнота для изменений, но хотелось бы автоматизировать весь процесс, так как менять только 3 слова надо будет в основном.

Нашел я в интернете такой vbs скрипт, который меняет слово.

Но он не дружит с русским языком.

А запускаю я его с помощью BAT файла, с таким содержанием.

Предварительно, я изменил название слов которые надо переименовать, то есть $displayusername$ поменял на guid-01, так как идея использовать $ была глупой. )

6 Ответ от Rumata 2014-02-09 01:47:38 (изменено: Rumata, 2014-02-09 01:51:16)

  • Rumata
  • Разработчик
  • Неактивен











Скрипт основывается на предположении, что все изменяемые теги располагаются каждый на отдельной строке. Название слов которые надо переименовать, то есть $displayusername$ можно оставить как и было прежде. В переменные FILE_SRC и FILE_DST пропишите реальные пути к исходному и результирующему файлам.

7 Ответ от alexii 2014-02-09 01:57:08

alexii, если забыть про UTF-8 и думать, что всё в CP866, сделаете BAT?

Не вижу большого смысла делать на пакетных файлах при наличии технологии, специально предназначенной для обработки xml-файлов — подводных камней слишком много. Так что — я пас.

8 Ответ от wisgest 2014-02-09 02:07:44

  • wisgest
  • Разработчик
  • Неактивен











при наличии технологии, специально предназначенной для обработки xml-файлов

Тут скорее обработка простого текста, обход DOM скорее запутает задачу, чем поможет.
Кстати, как работать с utf-8 в WSH? Не представляю как через FSO. Через ADO?

9 Ответ от wisgest 2014-02-09 02:12:43 (изменено: wisgest, 2014-02-09 02:16:19)

  • wisgest
  • Разработчик
  • Неактивен











Rumata,

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

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

10 Ответ от danishru 2014-02-09 02:22:26 (изменено: danishru, 2014-02-09 02:23:23)

Скрипт основывается на предположении, что все изменяемые теги располагаются каждый на отдельной строке. Название слов которые надо переименовать, то есть $displayusername$ можно оставить как и было прежде. В переменные FILE_SRC и FILE_DST пропишите реальные пути к исходному и результирующему файлам.

Большое вам спасибо, скрипт отработал на ура.

Я правильно понимаю, что бы добавить к этому скрипту новую переменную, то мне достаточно добавить новую set /p, и в

добавить цифру 4? Я так понимаю что usebackq tokens отвечает за введённые ранее переменные? И что изменить в коде, если я хочу убрать знаки $?

11 Ответ от Rumata 2014-02-09 02:47:51

  • Rumata
  • Разработчик
  • Неактивен











Чтобы добавить новую перменную достаточно добавить только строку ивда

отвечает за разделение строки на ТРИ подстроки и их размещение по параметрам цикла. Этот код предполагает, что входная строка выглядит ТОЧНО так как показано ниже

Проблема: в файле XML несколько элементов верхнего уровня. Из-за этого невозможно корректно прочитать файл XML в 1С.
Задача: устранить это, объединив все записи в один элемент первого уровня.
Вопрос : как это сделать ПРОГРАММНО? Как получить текст XML для последующего его изменения?

На скриншоте визуально объяснил суть вопроса.


Бред какой-то!
Просто программу чтения, немного доработать надо,
Вы на эту замену больше времени потратите.
Файл ХМЛ абсолютно правильный. (2) Программа чтения - это платформа 1С. Предлагаете мне платформу доработать?
Это троллинг?
Корректный xml документ должен содержать только один пролог, располагающийся в начале документа. (1)Может разделить на три файла? Ну или по количеству секций верхнего уровня. ;) (4) Нужно объединить в один файл (удалить эти ненужные строки разделения). Вопрос в том, как это сделать. (5)есть три секции- оставляем строку начало от первой секции и строку конец от последней, все остальные убираем. То что внутри секций не трогаем- так пойдет?
И заголовок тоже соответственно удаляем (5)есть три секции- оставляем строку начало от первой секции и строку конец от последней, все остальные убираем. То что внутри секций не трогаем- так пойдет?
(11)второй и 3 заголовок с версией и енкодингом тоже надо убрать.

(1) а по картинке очень похоже что у вас не очищается файл выгрузки этого ХМЛ
и происходит дописка новых отчетов,

чистите файл, перед формированием.

(1) ну и для самых упертых, такой вариант
открываете файл как текст
и одной командой СтрЗаменить
меняете , вот такой кусок кода

"</ReportXML>
<?xml version="1.0" encoding="windows-1251"?>
<ReportXML>"

(10) В том то и проблема. Как открыть xml файл как текст? Потом его изменить и записать обратно.

(12) Это вы серьезно, не знаете как текстовые фалы читать?

(18) Не сразу понял как сделать это с XML =) Суть вашей подсказки верная, дальше сам, там файлы сложнее, с циклами буду делать. Благодарю прочитать файл как текстовый со второй строки по предпоследнюю. если входит репортХМЛ - удалять
только идти надо снизу вверх

В этом и есть ключевая загвоздка! Как получить содержимое файла, изменить его, и записать вместо существующего файла?

Читайте также: