
Имейте в виду, что я новичок в XML и npp.
У меня есть большой XML-файл с несколькими тысячами записей, и мне нужно изменить строки, чтобы он работал в другой программе.
Я выполнил большую часть преобразований в формат, но теперь столкнулся с проблемой.
Как теперь выглядит мой XML:
</Value>
<name>C01</name>
<description>TEXT WITH VARYING NUBMER OF CHARACTERS FOR EACH LINE</Value>
</DPR>
и что я хочу:
<DPR>
<name>C01</name>
<description>TEXT WITH VARYING NUBMER OF CHARACTERS FOR EACH LINE</description>
</DPR>
Проблема в замене </Value>
двумя разными вещами в зависимости от того, находится ли это в строке отдельных символов. Вторая проблема, с которой я сталкиваюсь, заключается в замене частей строки и сохранении остальной части - когда часть, которую я хочу сохранить, имеет разное количество символов для каждой строки.
Любая помощь будет высоко оценена!
решение1
Заменяем </Value
на </DPR>
, когда он существует один в строке:
Найти то, что:^ *</Value>
Заменить:</DPR>
Режим поиска: Регулярное выражение
После этого не должно быть никаких других экземпляров, </Value>
кроме тех, которые идут вместе со строкой, поэтому их замена должна быть тривиальной. Но для полноты...
Замена [somestringhere]</Value
-> [somestringhere]</description>
, если он существует один в строке:
Найти то, что:^(<description>.+?)</Value>
Заменить:$1</description>
Режим поиска: Регулярное выражение
В приведенном выше ^
примере обозначает начало строки, *
означает пробел, который может существовать или отсутствовать, .+?
означает любые символы до первого вхождения строки после этого (более подробную информацию о регулярных выражениях см. здесь), а $1
в заменяемой строке будет заменена соответствующая часть, заключенная в скобки в исходных данных.
решение2
Проще всего использовать регулярные выражения в Perl:
perl -i -p -e 's/</Value>\n<name>/<DPR>\n<name>/' yourfile.txt