PDA

Показать полную графическую версию : [решено] Замена текста между тегов


vano42
09-08-2012, 07:47
Здравствуйте,
имеется xml файл с примерной структурой
<?xml version="1.0" encoding="UTF-8"?>
<user>
<string name="u_name">Vasilii Terkin</string>
<string name="u_vozrast">24565</string>
<string name="u_foto">local.jpg</string>
</user>

в файле всё может измениться, но
<string name="u_name">%USERNAME%</string>
останется неизменным.

Подскажите как заменить текст между тегами выше


еслиб были регулярки то чтото вроде
#<string name="u_name">(.*)</string>#iU

Iska
09-08-2012, 08:34
vano42, если:
в файле всё может измениться, »
используйте XML DOM: DOM Reference (http://msdn.microsoft.com/en-us/library/windows/desktop/ms764730(v=vs.85).aspx), а не регулярные выражения.

vano42
09-08-2012, 08:55
используйте XML DOM: DOM Reference, а не регулярные выражения. »
как требуемую задачу на нём сделать в .bat мне ещё более не понятно(

Anonymоus
09-08-2012, 10:48
vano42, я правильно понимаю, вам нужно найти определённый тэг (<string name="u_name">) и заменить только его содержимое, оставив содержимое других тэгов неизменным, так? В принципе, grep-ом это решаемо.

vano42
09-08-2012, 12:23
Anonymоus, именно так.

Anonymоus
09-08-2012, 13:19
vano42, внешнюю утилиту grep можно взять здесь (http://gnuwin32.sourceforge.net/packages/grep.htm).


@Echo Off
SetLocal EnableDelayedExpansion

Set File=file.txt
Set Out=file2.txt
Set NewValue=TestName123

:: Определяем номер строки с искомым тэгом
For /F "delims=:" %%A In ('grep -En "<string name=.u_name.>[^<]*</string>" "%File%"') Do (
Set Offset=%%A
)

:: Разбираем файл построчно
For /F "usebackq delims=" %%A In ("%File%") Do (
Set /A i+=1
rem Пишем всё, что не является искомой строкой в другой файл
If Not !i!==%Offset% (
Echo %%A
) Else (
For /F "tokens=1,2,3,4 delims=<>" %%A In ('grep -E "<string name=.u_name.>[^<]*</string>" "%File%"') Do (
rem Проверка на отступ перед тэгом, замена значения
Echo.%%A|Find "string">nul&&(
Echo ^<%%A^>%NewValue%^<%%C^>
)||(
Echo %%A^<%%B^>%NewValue%^<%%D^>
)
)
)
)>>"%Out%"
Pause




© OSzone.net 2001-2012